我如何在基于 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'] = falseIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow