Ich verwende Ubuntu 12.04 und habe ein großes Problem. Zwei getrennte Male hat heute eine meiner offenen Gnome-Terminal-Sitzungen den Fehler gesperrt und ausgedruckt
pipe: too many open files
Mir ist klar, dass dies wahrscheinlich mit meinem angezeigten Benutzerlimit zusammenhängt ulimit -n
, bei dem es sich übrigens um 1024 handelt. Das Problem ist, dass ich in diesem Fall das Beenden des betreffenden Terminals erzwingen kann, aber dann nichts öffnen kann, was eine neue PID erzeugt. Zum Beispiel kann ich xkill
nichts töten, ich kann kein anderes Terminal öffnen, um nach oben zu schauen, ich kann das Herunterfahren nicht ausführen, ich kann nicht nur zu einer Konsole wechseln und mich anmelden. Wenn Sie auf einen Link klicken, der ein X-Fenster öffnen soll, wird ein neues Fenster mit folgendem Inhalt angezeigt:
There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)
Dies ist derselbe Fehler, den ich erhalte, wenn ich versuche, mich anzumelden, nachdem ich Strg + Alt + F1 gedrückt habe. Da ich zu diesem Zeitpunkt völlig festgefahren bin, bin ich gezwungen, meinen Computer zu starten. Dies macht das Debuggen extrem schwierig.
Kann ich irgendetwas tun, um das Problem zu beheben, sobald dieser Fehler auftritt? Wie gehe ich vor, um den Fehler aufzuspüren?
Als letzte Anmerkung habe ich nicht eine lächerliche Anzahl von Dingen ausgeführt: zwei Terminals, eines mit einer Byobu-Sitzung mit 2 Registerkarten, eines mit einer Python-Sitzung; Eine einzige Instanz von Emacs, ein einziges Google Chrome und mehrere ROS-Knoten (Robot Operating System).
BEARBEITEN
Durch Drücken von Strg + Alt + Rücktaste, um meinen Display-Manager neu zu starten, konnte ich mich nur wieder anmelden und ein Terminal öffnen. Die Verwendung ps
ergab, dass immer noch viele Prozesse ausgeführt wurden, bei denen die Überbrückung stattgefunden hatte. Auf diese Weise kann ich meinen Computer zumindest von einer Software aus neu starten. Wie soll ich vorgehen, um festzustellen, was dieses Problem verursacht?
BEARBEITEN 2
Ich habe gerade zwei Terminals geöffnet, die ich gerade beiseite gelegt habe, und auf den Absturz gewartet. Sobald es passierte, konnte ich einen Screenshot von der Ausgabe von erfassen top
. Ich weiß nicht, ob die Ausgabe besonders nützlich sein wird, aber ich habe sie angehängt. Das Einzige, was mir aufgefallen ist, ist, dass es 5 Zombie-Prozesse gibt.
top
Ausführung in einem anderen Fenster starten , bevor das Problem auftritt, und dann zu diesem Fenster gehen und sehen, was dort steht? Haben Sie versucht, Ihr ulimit zu erhöhen, nachdem das Problem aufgetreten ist (es wird kein neuer Prozess ausgelöst )?Antworten:
Es scheint, dass Sie irgendwo ein Ressourcenleck haben. Sie können 'lsof' ausführen, um eine Liste aller geöffneten Dateien zu erhalten (offensichtlich irgendwann, bevor Ihr System ausgehungert ist). Vergleichen Sie die Liste mit aktiven Pids und Sie werden (vielleicht) den Täter finden.
Ich würde auch vorschlagen, das Limit für offene Dateien in /etc/security/limits.conf zu ändern (oder vielleicht woanders? Ich bin Ubuntu eine Weile nicht gefolgt und es scheint Spekulationen zu geben, dass limits.conf nicht geladen wird Standard). Wenn Sie wirklich ein Ressourcenleck haben, wird dies das Problem nur verlängern. Suchen Sie zuerst nach einem Leck.
quelle
top
ich in einem Terminal genau die Prozesse gestartet hatte, die den Absturz verursacht hatten, konnte ich einen Prozess mit einem bestimmten Speicherverlust erkennen. Ich bin mir immer noch nicht sicher, warum ich die Warnung "Zu viele Dateien" erhalten habe, dh ich bin mir nicht sicher, wie viele untergeordnete Prozesse hervorgerufen wurden. Die Behebung des Lecks scheint jedoch das Problem gelöst zu haben. Danke für die Hilfe!Die Meldung, dass zu viele Dateien geöffnet sind, ist wahrscheinlich prozessspezifisch und kein systemweites Problem. Die Option "Speicher kann nicht zugewiesen werden" kann prozessspezifisch sein, ist jedoch wahrscheinlich systemweit.
Wie cydonian.monk betonte, gibt es eine Art Ressourcenleck. Der wahrscheinlichste Schuldige ist ein außer Kontrolle geratener oder sich schlecht verhaltender Prozess, der entweder wiederholt Kinder hervorbringt oder einen Fehler oder einen Speicherverlust aufweist, der dazu führt, dass wiederholt Dateien geöffnet werden und / oder Speicher zugewiesen wird, bis dem System der Speicher ausgeht.
Ich würde mich auf das konzentrieren, was Sie in dem einen Gnome-Terminalfenster taten, in dem zuerst die Meldung "Zu viele Dateien geöffnet" angezeigt wurde. Bestimmen Sie, was von / in diesem Fenster ausgeführt wurde, und konzentrieren Sie sich auf dessen Verhalten. Wenn Sie ps is cron alle paar Minuten ausführen
top -b
und die Ausgabe in einer Datei speichern, erhalten Sie möglicherweise einen Einblick in die Vorgänge beim nächsten Absturz.Die von Ihnen bereitgestellte Top-Ausgabe sieht aus wie ein normal laufendes System.
quelle