GitLab内存占用过高解决方案
GitLab内存占用过高解决方案
一、问题发现与排查
前提:服务器CPU内存信息为2C4G
近来发现,每当推送代码,gitlab服务器很大概率会卡死;htop
命令查看服务器运行情况,发现内存占用在90%以上,使用以下命令查询占用内存最多的十个进程
1 |
|
果然,基本吃内存大户都为 gitlab 的进程,主要需要解决worker
和 sidekiq
高占用
二、问题分析
1. worker 进程
参考以下总结:
结合官方文档,unicorn['worker_processess']
需设置一个合适的值,官方推荐设置为物理核心数+1
2. sidekiq 进程
官方文档中写道
Notice: The 25 workers of Sidekiq will show up as separate processes in your process overview (such as top or htop) but they share the same RAM allocation since Sidekiq is a multithreaded application. Please see the section below about Unicorn workers for information about how many you need of those
翻译中文的意思是:
注意:Sidekiq的25名worker将在您的流程概述(例如top或htop)中显示为单独的进程,但由于Sidekiq是一个多线程应用程序,因此它们共享相同的RAM分配。请参阅以下有关Unicorn worker的部分,了解您需要多少人。
实际我并不需要这么多的worker,修改sidekiq['concurrency']
(默认25)以减少并发数。
三、问题解决
依据以上问题分析,修改配置文件 gitlab.rb
,默认为以下路径(若为容器运行,请修改挂接目录下的配置文件)
1 |
|
最终采用解决方案:
1. 减少 workder 进程数
1 |
|
2. 减少 worker 进程的内存空间
1 |
|
3. 减少 sidekiq 数据库并发数
1 |
|
4. 减少数据库缓存
1 |
|
5. 重新初始化配置
配置文件修改保存后,重启使配置生效
1 |
|
6. 效果验证
重启,使用命令查看内存占用,已降至50%左右
提交代码,服务器无卡顿,gitlab web端可正常访问;内存占用在几个提交推送后,维持在50%左右
至此,问题暂时解决,因为gitlab存在内存泄漏问题,后续待一段时间的提交推送后再观察内存情况。
参考: 解决GitLab内存消耗大的问题