我如何在基于 docker 的设置中减少 gitlab 内存消耗

我目前在服务器上运行 4 个独立的 docker 化 gitlab 实例。即使一段时间不使用,它们也倾向于消耗大量内存。

减少 unicorn 工作进程数

gitlab 默认使用 6 个 unicorn 工作进程。通过将工作进程数减少到 2,我的 gitlab 内存消耗减少了约 60%

gitlab_memory_config.rb
unicorn['worker_processes'] = 2

在我的 docker 化设置中,我只需更新 docker-compose.yml 中的 GITLAB_OMNIBUS_CONFIG 并重启实例。如果你没有使用 docker 安装 gitlab,你可能需要 sudo gitlab-ctl reconfigure

注意你需要至少 2 个 unicorn 工作进程才能使 gitlab 正常工作。详情请参见此问题

还要注意将工作进程数减少到最小值可能会对 gitlab 性能产生负面影响。如果你注意到性能不足,请增加工作进程数。

禁用 Prometheus 监控

大多数小型安装不需要 Prometheus,即 Gitlab 中集成的监控工具:

disable_prometheus.rb
prometheus_monitoring['enable'] = false

减少 sidekiq 并发

sidekiq 是 Gitlab 中集成的后台作业处理器。默认并发为 25。我建议减少它。

reduce_sidekiq_concurrency.rb
sidekiq['concurrency'] = 2

这可能会导致后台作业花费更长时间,因为它们必须在队列中等待,但根据我的经验,对于小型安装来说这无关紧要。

减少 PostgreSQL 共享内存

这在 StackOverflow 上被推荐。

reduce_postgresql_shared_buffers.rb
postgresql['shared_buffers'] = "256MB"

设置得太低可能会导致更重的 IO 负载,所有操作(包括网页加载)可能会变慢。

完整配置

这是配置(结合上述所有策略)以降低内存消耗:

gitlab_complete_memory_config.rb
# Unicorn 配置
unicorn['worker_processes'] = 2
# PostgreSQL 配置
postgresql['shared_buffers'] = "256MB"
# Sidekiq 配置
sidekiq['concurrency'] = 2
# Prometheus 配置
prometheus_monitoring['enable'] = false

Check out similar posts by category: Docker, Git