bundle processes are killed/turned over too frequently
### Summary As a sys admin of an internal gitlab server, I see that the `bundle` processes are killed off frequently and re-created, and this causes unnecessary system slowness to the point of being almost unusable for pulling up label names or milestone names or any other RPC lookup. ### Steps to reproduce Use `top` or `ps` and watch the PID values turn over for any `bundle` proc under `unicorn`. ### Example Project Any internal gitlab server would do. It appears to have been from this: https://about.gitlab.com/2015/06/05/how-gitlab-uses-unicorn-and-unicorn-worker-killer/ where the "answer" to memory leaks is to not fix them and instead just restart the process. Yikes! ### What is the current *bug* behavior? The `bundle` processes turn over frequently causes slowness in the UI due to the cost of the `bundle` process start time (context switch). ### What is the expected *correct* behavior? The `bundle` processes should NOT turn over frequently. ### Relevant logs and/or screenshots I increased the max memory here to `500` from `350`: ``` # This file is used by Rack-based servers to start the application. if defined?(Unicorn) require 'unicorn' if ENV['RAILS_ENV'] == 'production' || ENV['RAILS_ENV'] == 'staging' # Unicorn self-process killer require 'unicorn/worker_killer' min = (ENV['GITLAB_UNICORN_MEMORY_MIN'] || 300 * 1 << 20).to_i max = (ENV['GITLAB_UNICORN_MEMORY_MAX'] || 500 * 1 << 20).to_i # Max memory size (RSS) per worker use Unicorn::WorkerKiller::Oom, min, max end end require ::File.expand_path('../config/environment', __FILE__) map ENV['RAILS_RELATIVE_URL_ROOT'] || "/" do run Gitlab::Application end ``` ### Output of checks (If you are reporting a bug on GitLab.com, write: This bug happens on GitLab.com) #### Results of GitLab environment info <details> <summary>Expand for output related to GitLab environment info</summary> <pre> [root@gitlab gitlab]# sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production System information System: Proxy: no Current User: git Using RVM: no Ruby Version: 2.3.3p222 Gem Version: Bundler Version:1.15.4 Rake Version: 12.1.0 Redis Version: 3.0.3 Git Version: 2.9.3 Sidekiq Version:5.0.4 Go Version: go1.8.3 linux/amd64 GitLab information Version: 10.2.3-ee Revision: a0f9e22 Directory: /home/git/gitlab DB Adapter: postgresql DB Version: 9.4.9 URL: http://gitlab.medstrat.com HTTP Clone URL: http://gitlab.medstrat.com/some-group/some-project.git SSH Clone URL: git@gitlab.medstrat.com:some-group/some-project.git Elasticsearch: no Geo: no Using LDAP: no Using Omniauth: no GitLab Shell Version: 5.9.4 Repository storage paths: - default: /home/git/repositories Hooks: /home/git/gitlab-shell/hooks Git: /usr/bin/git </pre> </details> #### Results of GitLab application Check <details> <summary>Expand for output related to the GitLab application check</summary> <pre> TODO: but yes, tests I'm sure are passing. (For installations with omnibus-gitlab package run and paste the output of: `sudo gitlab-rake gitlab:check SANITIZE=true`) (For installations from source run and paste the output of: `sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true`) (we will only investigate if the tests are passing) </pre> </details> ### Possible fixes Change `config.ru` from this ``` max = (ENV['GITLAB_UNICORN_MEMORY_MAX'] || 350 * 1 << 20).to_i ``` to this: ``` max = (ENV['GITLAB_UNICORN_MEMORY_MAX'] || 500 * 1 << 20).to_i ``` which is what I currently do after every gitlab update now (which is tedious to remember to do).
issue