我有一個Git的Redmine服務器。它有2GB的RAM。Git的接收/上傳包需要所有的內存在推
當有人試圖推動一個存儲庫大於2GB的數據,我得到以下錯誤:
Counting objects: 957, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (577/577), done.
Writing objects: 100% (957/957), 2.18 GiB | 29.66 MiB/s, done.
Total 957 (delta 255), reused 862 (delta 229)
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
第一fatal: ...
之前,紅寶石開始把所有的服務器上的RAM。
當達到〜2GB的RAM使用量時,會發生fatal: ...
錯誤。錯誤在服務器上:
App 9339 stderr: Errno::ENOMEM: Cannot allocate memory - git
所以我的猜測是,Git的或管理平臺試圖把那些2.18 GB到RAM中,這顯然是不行的。
錯誤後:
- 服務器上的存儲庫仍然是空的;
- 直到我重新啓動Redmine時,RAM使用率仍然在95 +%。
我該如何讓它工作?它是Redmine還是Git能夠吃掉所有的RAM?
可以推動數據「零件一部分」(like here)是一個解決方案嗎?
我已經試過increase the HTTP post buffer size(git config http.postBuffer 524288000
)沒有成功。
編輯(2017年6月1日):
某些規格:
- Ubuntu的LTS 05年4月12日
- 管理平臺v2.6.9
- GIT中v1.7.9 .5
Redmine部署在帶有乘客模塊的Apache服務器(v2.2.22)後面。它使用Grack(最新修訂版)將其Git集成到Redmine SCM插件中來創建存儲庫。
重新查看日誌後,它看起來像罪魁禍首是格雷克。
App 9339 stderr: Errno::ENOMEM: Cannot allocate memory - git
App 29461 stderr: /opt/grack/lib/git_adapter.rb:24:in ``'
App 29461 stderr: /opt/grack/lib/git_adapter.rb:24:in `command'
App 29461 stderr: /opt/grack/lib/git_adapter.rb:34:in `upload_pack'
App 29461 stderr: /opt/grack/lib/grack.rb:84:in `get_info_refs'
App 29461 stderr: /opt/grack/lib/grack.rb:55:in `call'
App 29461 stderr: /opt/grack/lib/grack.rb:55:in `call'
換句話說,當Grack啓動git upload-pack
命令發生錯誤。
EDIT(2017年6月1日)(2):
本地資源庫的確具有2 + GB一包。我用下面的重新包裝它:
git repack -a -d --window-memory=512m --max-pack-size=512m
爲了減少大包成多個小包裝。我還配置了以下客戶端和服務器端:
git config pack.windowMemory 512m
git config pack.packSizeLimit 512m
但問題仍然存在。
App 30005 stderr: [ 2017-06-01 09:15:04.4393 30122/0x000000019264a8(Worker 1) utils.rb:72 ]: *** Exception Errno::ENOMEM in Rack body object #each method (Cannot allocate memory - git) (process 30122, thread 0x000000019264a8(Worker 1)):
App 30005 stderr: from /opt/grack/lib/git_adapter.rb:19:in `popen'
App 30005 stderr: from /opt/grack/lib/git_adapter.rb:19:in `command'
App 30005 stderr: from /opt/grack/lib/git_adapter.rb:43:in `receive_pack'
App 30005 stderr: from /opt/grack/lib/grack.rb:70:in `block in service_rpc'
EDIT(2017年6月1日)(3):
增加了一些日誌記錄Grack,看看它究竟推出:
git receive-pack --advertise-refs --stateless-rpc /var/git/mygit.git
因爲它不啓動命令從Git倉庫目錄中,我嘗試了以下內容:
git config --global pack.windowMemory 512m
git config --global pack.packSizeLimit 512m
Sa仍然無法工作。
EDIT(2017年6月1日),(4):
再次嘗試,但與64m
代替512m
,仍然沒有效果。
它看起來像Git仍然需要採取RAM上的所有對象來開始包裝。客戶端,git repack
命令確實需要2 + GB才能執行,即使結果輸出是多個512 MB文件。
Downvoters,請解釋。我接受這個事實,即我的問題可能很愚蠢,但只是'-1'不會有幫助。 – kagmole
我已經投票贊成你糾正你的downvoter問題:D,請解釋更多,哪個OS,哪個GIt/redmine版本,它是如何部署的,它是redminegit託管插件還是什麼? –
謝謝你的關注。我更新了我的問題。我現在將尋找Grack的潛在問題。 – kagmole