2013-03-13 5 views
6

ich ein Problem mit Git bin zu begegnen, wo ich die folgende Meldung bin Empfang:Warum scheitern git auf Push/holen mit „Too many open files“

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

Die Systemadministratoren haben meine Datei Grenze erhöht , aber es hat das Problem nicht behoben. Außerdem habe ich kein Problem mit dem Erstellen neuer Dateien mit vi.

Beim Versuch, eine Niederlassung zu drücken, erhalte ich eine ähnliche Nachricht:

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

Könnte jemand genau beantworten, warum dies geschieht? Ich habe keine Änderungen an meiner git config vorgenommen und dies manuell überprüft.

Antwort

9

Es gibt zwei ähnliche Fehlermeldungen:

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

Es sieht aus wie du bist EMFILE bekommen, was bedeutet, dass die Anzahl der Dateien für einen einzelnen Prozess überschritten wird. Also, zu überprüfen, ob vi Dateien öffnen kann, ist irrelevant - vi wird seine eigene, separate Dateitabelle verwenden. Überprüfen Sie Ihre Grenzen mit:

 
$ ulimit -n 
1024 

Also auf meinem System gibt es eine Grenze von 1024 offenen Dateien in einem einzigen Prozess. Sie sollten Ihren Systemadministrator nicht fragen müssen (bitte verwenden Sie nicht die Abkürzung SA, es ist zu undurchsichtig; wenn Sie abkürzen müssen, verwenden Sie "sysadmin"), um das Limit zu erhöhen.

Sie können überprüfen, welche Dateien Git öffnet, indem Sie Git unter strace ausführen.

Dies könnte ein Fehler in Git oder in einer Bibliothek sein, oder es könnte sein, dass Sie eine alte Version von etwas verwenden, oder es könnte etwas bizarrer sein. Versuchen Sie zunächst strace, um zu sehen, welche Dateien geöffnet werden, und prüfen Sie, ob Git diese Dateien schließt.

Update von Hazok:

Nach der oben genannten Empfehlungen verwenden, stellt sich heraus, der Fehler durch zu viele lose Gegenstände verursacht wurde. Es gab zu viele lose Objekte, weil git gc nicht oft genug ausgeführt wurde.

+0

Danke für die Erklärung und Tipps. Ich habe die Anfrage nicht an die SAs gerichtet, sie versuchen immer noch, die Ursache herauszufinden, und es war zu lang, also wollte ich sehen, was die Gurus auf Stackoverflow vorschlagen: D Ich habe es versucht und es kostet eine Tonne von stat, lstat, öffne, lese, lese, schließe die Befehle auf jedem Tag, von dem ich aus dem Befehl ausgebrochen bin. – Hazok

+0

Würde es Ihnen etwas ausmachen, wenn ich Ihre Antwort editieren würde, um den endgültigen Grund und die Lösung darin zu finden? Ich würde dir gerne den vollen Dank dafür geben, da es ein Git-Problem war und das Laufen von Strace eine Tonne half. – Hazok

+0

Das ist eine gute Idee, gehen Sie voran und bearbeiten Sie den Beitrag. –