【问题标题】:High memory usage for Gitlab CEGitlab CE 的高内存使用率
【发布时间】:2016-07-07 10:52:35
【问题描述】:

看这张显示gitlab ce内存消耗的图片。

我真的不需要所有这些工人,sidekiq 或 unicorn 或所有这些守护进程。这是在空闲。我的意思是,我安装它是为了管理 1 个项目,大概有 4 个人,我不需要所有这些守护进程。有什么办法可以减少这种情况吗?

【问题讨论】:

  • 尽管我也在为 Gitlab 内存使用而苦苦挣扎,但我认为这个问题不属于 StackOverflow。可能是服务器故障?
  • 我也有同样的问题,Gitlab 监控显示基本上空闲 2.3 GB。

标签: git gitlab gitlab-omnibus


【解决方案1】:

我遇到了同样的问题:普通 Ubuntu 20.04 上的普通 Gitlab 可能会持续一天,然后在没有任何负载的情况下崩溃。裸机 EPYC(霄龙)、8c /16t 和 64 GB RAM。

BrokenBinary's answer 提到,Postgresql 占用了 15G 份额,但即使将其“修复”为 2G 也不够。

我还必须确定 Puma 工人的数量:

puma['worker_processes'] = 2

似乎较新的 Gitlab 安装使用替换 unicorn 时会出现内存泄漏,因为 unicorn 存在内存泄漏。

更新:再次崩溃。下次尝试:

sidekiq['max_concurrency'] = 6
sidekiq['min_concurrency'] = 2

【讨论】:

    【解决方案2】:

    当我更改 /etc/gitlab/gitlab.rb 时,如其他答案中所述,它对我不起作用。

    这就是我所做的,我编辑了以下文件:

    /var/opt/gitlab/gitlab-rails/etc/unicorn.rb (可能你机器里文件的路径不一样)

    并将worker_processes 9 更改为worker_processes 2

    【讨论】:

      【解决方案3】:

      我也遇到了 gitlab 的高内存消耗问题。于是我运行了linux工具htop

      就我而言,我发现 postgresl 服务使用了大部分内存。

      postgres 服务运行使用了 16G 中的 14.5G

      我一个接一个地停止了一个 gitlab 服务,发现当我停止 postgres 时释放了很多内存。

      你可以试试

      gitlab-ctl stop postgresql
      

      然后再次启动服务

      gitlab-ctl start postgresql
      

      终于在/etc/gitlab/gitlab.rb遇到了如下配置

      ##! **recommend value is 1/4 of total RAM, up to 14GB.**
      # postgresql['shared_buffers'] = "256MB"
      

      我只是通过删除注释# 将共享缓冲区设置为 256MB,因为 256MB 对我来说已经足够了。

      postgresql['shared_buffers'] = "256MB"
      

      并执行gitlab-ctl reconfigure。 gitlab-ctl 重启受影响的服务,内存消耗现在非常适中。

      希望对其他人有所帮助。

      【讨论】:

      【解决方案4】:

      我已经解决了这个问题。
      其中占用内存最多的是独角兽!
      我的 gitlab 的版本是“GitLab Community Edition 10.6.3”。
      它被部署在我的服务器上,它是 cpu,六核的 INTEL Core i5 8400。
      所以gitlab为unicorn分配了7个进程,每个进程占用6%的mem。

      方法:
      vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
      How to edit the unicorn.rb
      编辑并保存更改。 并执行“gitlab-ctl restart unicorn”
      The htop behind unicorn.rb changes

      【讨论】:

      • 非常感谢!我在 2x6 Xeon(24 线程)上运行,无法弄清楚为什么它会分叉这么多进程。配置注释中没有指示这是 CPU 计数的倍数!只是“默认2”。我终于取消了“2”的注释,它工作正常。
      【解决方案5】:

      从您的图像看来,Sidekiq 及其所有工作人员总共使用了 257mb 的内存,这是正常的。请记住,所有 Sidekiq 工作人员都使用相同的内存池,因此他们总共使用 257mb,而不是每个 257mb。正如您从自己的答案中看到的那样,减少 Sidekiq 工作人员的数量不会大幅减少内存使用量,但会导致后台作业花费更长的时间,因为它们必须等待 Sidekiq 进程可用。我会将此值保留为默认值,但如果您真的想减小它,那么我不会将其减小到 4 以下,因为您有 4 个内核。

      Unicorn 进程也共享一个内存池,但每个 worker 有 1 个在其 2 个进程之间共享的池。在您的原始图像中,您似乎有 5 个工作人员,推荐用于 4 核系统,每个工作人员使用约 250mb 的内存。如果您将工作人员的数量减少到 3 个,您应该不会注意到任何性能差异。

      另外,您可能想阅读this doc 了解如何配置 Unicorn。您绝对不希望工作人员的数量少于 2,因为它在从 GitLab UI 中编辑文件时会导致问题,如discussed here,并且根据我链接的文档中的此引用,它还会禁用通过 HTTPS 进行的克隆:

      只有一个 Unicorn worker 的 git over ssh 访问才能工作,因为 git over HTTP 访问需要两个正在运行的 worker(一个 worker 接收用户请求,一个 worker 用于授权检查)。

      最后,GitLab 的最新版本似乎为 postgresql 数据库缓存分配了更多内存。我建议将/etc/gitlab/gitlab.rb 中的这个属性postgresql['shared_buffers'] 配置为总可用RAM 的1/4。有关更多信息,请参阅下面的René Link's answer

      【讨论】:

      • 添加@anon 关于关闭 prometheus 的建议会很有趣
      【解决方案6】:

      从 GitLab 9.0 开始,prometheus 默认启用,我注意到在我的情况下使用了超过 1.5GB 的大量内存,这可以通过 prometheus_monitoring['enable'] = false 禁用

      【讨论】:

      • 在具有 2Gb 内存的系统上运行 gitlab 时,这使得“空闲”内存消耗从 1.7Gb 下降到 1.2Gb - 所以这肯定会产生很大的不同。我注意到 prometheus 是用于数据库监控的。是否可以通过一些关于禁用它的含义的信息来扩展这个答案。
      【解决方案7】:

      我在浏览gitlab.rb时发现的2个选项

      1. sidekiq['concurrency'] = 1 #25 is the default
      2. unicorn['worker_processes'] = 1 #2 is the default

      根据他们的警告,这需要理解:

      ## Only change these settings if you understand well what they mean
      ## see https://about.gitlab.com/2015/06/05/how-gitlab-uses-unicorn-and-  unicorn-worker-killer/
      ## and https://github.com/kzk/unicorn-worker-killer
      # unicorn['worker_memory_limit_min'] = "300*(1024**2)"
      # unicorn['worker_memory_limit_max'] = "350*(1024**2)"
      

      这是在配置修改之后

      在我看来还是太多了。

      【讨论】:

      • 将 worker_processes 设置为 1 会导致我通过 Web UI 的提交失败。
      • 从 GitLab 10.1 开始,不要将 worker_processes 设置为小于 2 的任何值。 gitlab.com/gitlab-org/gitlab-ce/issues/18771
      • @Wernight:当 worker_processes 设置为 1 时,我可以通过 Web UI 问题确认提交。所以不建议这样做。将其设置为 2。
      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 2011-09-19
      • 2018-07-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多