Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

GitLabのworker_processesの設定

GitLabのunicornの設定のうち、worker_processes(プロセス数)はCPUコア数+1がおすすめ、という話がGitLabのドキュメントに載っている。
https://docs.gitlab.com/ee/install/requirements.html#unicorn-workers
なんだけど、これってだいたい奇数になるし、それにスループットしか見てないのでは?という疑念が。

  1. GitLabをOmnibus package経由でインストールすると、GitLabの前段にnginxを置く構成になる。ここで、前段のnginxの設定のworker_processes, worker_connectionsの設定と合わせて、unicornのプロセス数を、nginxからGitLabに入ってくるコネクションx2にしないと、複数のリクエストが同時にGitLabに到達した場合、1つのリクエストが1つずつプロセスを掴んだままスタベーションを起こして、そのまま処理がタイムアウトするケースがある。参考: https://docs.gitlab.com/omnibus/settings/unicorn.html
  2. プロセス数が奇数だと、最初に処理を開始したプロセスと、後追いで割り当てられたプロセスとで、タイムアウトのタイミングがバラバラになるから、片方のプロセスだけがタイムアウトする危険性がある。

GitLabの挙動自体に問題が出るケースとしては上記の2つだけど、他にも、2つのプロセスを同時に割り当てられたリクエストと、1つずつバラバラに割り当てられたプロセスとで、nginxのログに残るリクエストごとのターンアラウンドタイムにばらつきが出るから、負荷テストのときなんかにその理由を説明する必要がある、という開発運用上の問題もあるのでは……