2013-03-13 48 views
6

在那裏我收到以下消息,我遇到使用Git的一個問題:爲什麼混帳失敗推送/與「打開的文件太多」取

> git fetch 
error: cannot create pipe for ssh: Too many open files 
fatal: unable to fork 

系統管理員增加了我的文件限制,但它沒有糾正這個問題。另外,我沒有用vi創建新文件的問題。

當試圖推動一個新的分支,我得到類似的消息:

git push origin test_this_broken_git error: cannot create pipe: Too many open files fatal: send-pack: unable to fork off sideband demultiplexer

有人能回答究竟爲什麼發生這種情況?我沒有做任何最近的變化,我的git配置,並已手動驗證。

回答

9

有兩個類似的錯誤消息:

 
EMFILE: Too many open files 
ENFILE: Too many open files in system 

它看起來像你得到EMFILE,這意味着被超過的文件爲一個單獨的進程數。因此,檢查vi是否可以打開文件是無關緊要的 - vi將使用其自己的單獨文件表。檢查您的限制:

 
$ ulimit -n 
1024 

所以在我的系統中,在單個進程中有1024個打開文件的限制。您不需要詢問系統管理員(請不要使用首字母縮略詞SA,它太不透明;如果您必須縮寫,請使用「sysadmin」)來提高限制。

您可能希望通過運行Git在strace下檢查Git打開的文件。

這可能是Git或庫中的一個bug,或者它可能是你使用舊版本的東西,或者它可能更奇怪。首先嚐試strace以查看它打開的文件,並檢查Git是否關閉這些文件。從Hazok

更新:

使用上述建議後,原來的錯誤是由過多的鬆散物引起的。有太多鬆散的物體,因爲git gc運行不夠頻繁。

+0

感謝您的解釋和提示。我沒有向SA發出請求,他們試圖找出根本原因仍然存在,並且它太長了,所以我想看看Stackoverflow的大師建議什麼:D 我試過了,並且它傾倒了一噸stat,lstat,打開,讀取,讀取,關閉命令,看起來是從我從命令中突然出現的每個標記。 – Hazok 2013-03-13 01:54:51

+0

你是否介意我編輯你的答案以提供最終原因和解決方案?我想給你充分的信任,因爲這是一個Git問題,運行幫助一噸。 – Hazok 2013-03-13 03:32:36

+0

這是一個好主意,請繼續並編輯帖子。 – 2013-03-13 03:52:45

相關問題