gitlab推送失败,内存不足的处理
git提交时报错:
2025-09-03 20:03:32.583 [info] > git push origin master:master [4866ms]
2025-09-03 20:03:32.583 [info] fatal: Out of memory, malloc failed (tried to allocate 1048576000 bytes)
看了下服务器内存,空余的只有几百M了。
用htop,F6,选择按mem排序,发现有很多gitlab-rails 的 sidekiq 占用几百M的进程。
🔍 为什么 GitLab Sidekiq 会占用这么多内存?
多进程架构:
Sidekiq 是 GitLab 的异步任务处理器,负责处理后台任务(如发送邮件、仓库同步、CI/CD 流水线调度等)。
默认配置下,GitLab 会启动 多个 Sidekiq 进程(每个进程是一个独立的 worker),以实现并发处理任务。
每个进程都需加载完整的 Rails 应用环境(包含代码、库、配置),这是内存占用的主要来源。
内存组成:
Rails 环境:约 300-500 MB/进程(取决于功能启用情况)。
任务处理缓存:执行任务时临时增加的内存。
连接池:数据库、Redis 连接也会占用内存。
修改 /etc/gitlab/gitlab.rb
,降低并发数:
sidekiq['max_concurrency'] = 8 # 默认值较高(如25),根据CPU核心数调整(建议 核心数*2)
sidekiq['min_concurrency'] = 2 # 最低并发数
然后重启生效:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart sidekiq