git(GitLab)ユーザーのrubyプロセスが100%に近くなる
ある日突然git fetchが失敗するので調べたときの覚書。
環境: CentOS 6.6, GitLab 7.11.4 → 7.12.0
Mac上でgitコマンドを打つと下記エラー
$ git fetch origin
remote: Counting objects: 48, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
あれ?と思ってもう一度実行
$ git fetch origin
[FATAL] failed to allocate memory
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
SSH接続で既に失敗する。
サーバー側でSSHデーモンを再起動しようとすると「fork: メモリを確保できません」とエラーになった。
topコマンドを打つとgitユーザーがrubyコマンドを一生懸命実行していてcpu使用率が100%になっている。
試しにGitLabサービスを止めてみるとCPU100%状態が収まったので、GitLabが原因だと判明。
# gitlab-ctl stop
もう一度GtiLabを実行しながらログを確認。
# gitlab-ctl start
# tail -f /var/log/gitlab/unicorn/unicorn_stderr.log
/opt/gitlab/embedded/service/gitlab-rails/config/initializers/gitlab_shell_secret_token.rb:13:in `write': Permission denied @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/.gitlab_shell_secret (Errno::EACCES)
なんかエラーを吐き続けてる。
書き込みに失敗している様子。
プログラムを確認
# more /opt/gitlab/embedded/service/gitlab-rails/config/initializers/gitlab_shell_secret_token.rb
「Gitlab.config.gitlab_shell.secret_file」を設定すれば良さそう。
ここでGitLabをYUM経由で7.12.0にアップデートしたけど、reconfigureしてないと気づいてやってみる。
# gitlab-ctl reconfigure
# gitlab-ctl restart
。。。直ったっぽい。
< Related Posts >