在 Debian 上限制 GitLab 的内存占用,通常有三种常见思路:限制 GitLab 自身组件、限制 Linux 系统级资源(systemd / cgroup)、以及调整 Swap / OOM 策略。下面按实用程度从高到低说明。
GitLab 自带很多服务(unicorn/puma、sidekiq、postgresql、redis 等),可以通过 gitlab.rb 限制。
sudo vim /etc/gitlab/gitlab.rb
GitLab 13+ 默认使用 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'] = "400MB"
sidekiq['concurrency'] = 5
sidekiq['max_memory_kb'] = 300000
postgresql['shared_buffers'] = "128MB"
postgresql['max_connections'] = 20
redis['maxmemory'] = "100mb"
redis['maxmemory_policy'] = "allkeys-lru"
prometheus_monitoring['enable'] = false
grafana['enable'] = false
gitlab_rails['smtp_enable'] = false
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
如果你希望 GitLab 整体不能超过某个内存,可以用 systemd。
sudo systemctl edit gitlab-runsvdir.service
[Service]
MemoryMax=1G
MemoryHigh=800M
TasksMax=200
sudo systemctl daemon-reload
sudo systemctl restart gitlab-runsvdir.service
⚠️ 注意:这个是 硬限制,超出会被 OOM Kill
如果你不是用 systemd(很少见):
cgcreate -g memory:/gitlab
echo 1G > /sys/fs/cgroup/memory/gitlab/memory.limit_in_bytes
cgexec -g memory:/gitlab gitlab-ctl start
sudo sysctl vm.swappiness=10
或限制 OOM 优先级:
echo -500 > /proc/$(pgrep -f gitlab)/oom_score_adj
| 场景 | 建议内存 |
|---|---|
| 个人 / 测试 | 1–2 GB |
| 小团队 | 4 GB |
| 生产环境 | 8 GB+ |
sudo gitlab-ctl status
free -h
ps aux --sort=-%mem | head
如果你能告诉我:
我可以给你一份 精准配置模板。