在 Linux 上限制 GitLab(Omnibus 安装) 的内存,常见且推荐的方式是通过 GitLab 自带配置参数 限制各组件内存,其次才是用 系统级手段(systemd / cgroup)。下面按「最推荐 → 进阶」说明。
编辑配置文件:
sudo vim /etc/gitlab/gitlab.rb
GitLab 13.0+ 默认是 Puma
puma['worker_processes'] = 2
puma['worker_memory_limit_min'] = "200MB"
puma['worker_memory_limit_max'] = "500MB"
老版本(Unicorn):
unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_min'] = "200MB"
unicorn['worker_memory_limit_max'] = "500MB"
sidekiq['max_concurrency'] = 10
sidekiq['min_concurrency'] = 5
postgresql['shared_buffers'] = "256MB"
postgresql['work_mem'] = "16MB"
postgresql['maintenance_work_mem'] = "64MB"
redis['maxmemory'] = "128mb"
redis['maxmemory_policy'] = "allkeys-lru"
prometheus_monitoring['enable'] = false
grafana['enable'] = false
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
✅ 这是最安全、最稳定的方式
GitLab 组件是多个 systemd 服务,例如:
gitlab-runsvdir.servicegitlab-puma.servicegitlab-sidekiq.service示例(限制 puma):
sudo systemctl edit gitlab-puma.service
写入:
[Service]
MemoryMax=512M
MemoryHigh=400M
然后:
sudo systemctl daemon-reload
sudo systemctl restart gitlab-puma.service
⚠️ 注意:GitLab Omnibus 有时会用 runsv,systemd 限制可能不完全生效。
如果你用 Docker 或 K8s:
docker run -m 2g --memory-swap=2g gitlab
或 K8s resources.limits.memory
| 内存 | 建议 |
|---|---|
| 2GB | 仅个人 / 测试 |
| 4GB | 小团队 |
| 8GB+ | 生产 |
2GB 示例:
puma['worker_processes'] = 1
sidekiq['max_concurrency'] = 5
postgresql['shared_buffers'] = "128MB"
prometheus_monitoring['enable'] = false
gitlab-ctl top
ps aux --sort=-%mem | head
free -h
如果你愿意,可以告诉我:
我可以帮你 直接给出一套完整 gitlab.rb 配置。