Skip to content

解决内存占用问题

GitLab 启动后占用运行内存较大,一段时间过后,内存占用递增,分配再多的内存也不够用; 由于新版本的 GitLab 从 14.0 开始,已默认使用 puma 代替 unicorn。在修改时请注意查看版本支持,另外升级前需要先将 gitlab.rb 中的 unicorn 配置改为 puma 相关配置。

1)根据服务器实际情况进行修改配置

1
2
3
4
5
6
7
8
9
$ cat gitlab.rb | grep -Ev '^$|#'
puma['enable'] = true                    
puma['worker_timeout'] = 60
puma['worker_processes'] = 2
puma['max_threads'] = 4
puma['per_worker_max_memory_mb'] = 1024
sidekiq['max_concurrency'] = 16
postgresql['shared_buffers'] = "256MB"
postgresql['max_worker_processes'] = 8

2)优化启动速度,因 Docker 版本的会自动启动 prometheus|grafana|alertmanager 和一系列 exporter,非常占用资源,且导致启动较慢,可通过修改配置文件来关闭功能,待需要时再开启

$ ps -ef|grep -E 'prome|exporter|alert|graf'

$ cat gitlab.rb | grep -vE '^#|^$'
puma['enable'] = true
puma['worker_timeout'] = 60
puma['worker_processes'] = 2
puma['max_threads'] = 4
puma['per_worker_max_memory_mb'] = 1024
sidekiq['max_concurrency'] = 20
postgresql['shared_buffers'] = "256MB"
postgresql['max_worker_processes'] = 8
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_exporter['enable'] = false
prometheus_monitoring['enable'] = false
grafana['enable'] = false

3)重载配置生效命令

1
2
3
4
$ docker exec -it gitlab gitlab-ctl reconfigure
gitlab Reconfigured!

$ docker exec -it gitlab gitlab-ctl restart

附加说明:版本 14.0 之前的配置优化如下

1
2
3
4
5
6
7
8
unicorn['enable'] = true
unicorn['worker_timeout'] = 60                        # 减少超时时间
unicorn['worker_processes'] = 2                       # 减少进程数
unicorn['worker_memory_limit_min'] = "300 * 1 << 20"  # 内存上限最小值
unicorn['worker_memory_limit_max'] = "500 * 1 << 20"  # 内存上限最大值
sidekiq['concurrency'] = 16                           # 减少进程数
postgresql['shared_buffers'] = "256MB"                # 减少数据库缓存
postgresql['max_worker_processes'] = 8                # 减少数据库并发数