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
又出現推送失敗的了, 這次是在本地命令行執行解決的:
git config --global http.postBuffer 0