
Ich verwende Ubuntu 12.04 und habe ein großes Problem. Zweimal heute ist eine meiner offenen Gnome-Terminal-Sitzungen abgestürzt und hat den Fehler ausgegeben
pipe: too many open files
Mir ist klar, dass das wahrscheinlich mit meinem angezeigten Benutzerlimit zusammenhängt ulimit -n
, das übrigens 1024 beträgt. Das Problem ist, dass ich, sobald dies geschieht, das fehlerhafte Terminal zwar zwangsweise beenden kann, dann aber nichts öffnen kann, was eine neue PID generiert. Ich kann beispielsweise nichts beenden xkill
, ich kann kein anderes Terminal öffnen, um nach oben zu schauen, ich kann nicht shutdown ausführen, ich kann nicht nur auf eine Konsole wechseln und mich anmelden. Wenn ich auf einen Link klicke, der ein X-Fenster öffnen sollte, 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 nach dem Drücken von Strg+Alt+F1 anzumelden. Da ich an diesem Punkt völlig feststecke, bin ich gezwungen, einen Hardboot meines Rechners durchzuführen. Dies macht das Debuggen äußerst schwierig.
Kann ich irgendetwas tun, um den Fehler wiederherzustellen, wenn er einmal aufgetreten ist? Wie gehe ich vor, um den Fehler zu finden?
Als letzte Anmerkung: Ich habe nicht übermäßig viele Dinge ausgeführt: zwei Terminals, eines mit einer Byobu-Sitzung mit zwei Tabs, eines mit einer Python-Sitzung; eine einzelne Instanz von Emacs, ein einzelnes Google Chrome und mehrere ROS-Knoten (Robot Operating System).
BEARBEITEN
Durch Drücken von Strg+Alt+Rücktaste zum Neustarten meines Display-Managers konnte ich mich wieder anmelden und ein Terminal öffnen. Die Verwendung ps
ergab, dass noch viele Prozesse ausgeführt wurden, die ausgeführt wurden, als es zum Absturz kam. Zumindest kann ich meinen Computer jetzt per Software neu starten. Wie gehe ich vor, um herauszufinden, was dieses Problem verursacht?
BEARBEITEN 2
Ich habe einfach zwei Terminals geöffnet, die ich gerade beiseite gelegt hatte, und darauf gewartet, dass der Absturz passiert. Als er passierte, konnte ich einen Screenshot der Ausgabe von machen top
. Ich weiß nicht, ob die Ausgabe besonders nützlich sein wird, aber ich habe sie angehängt. Das einzige, was mir besonders merkwürdig auffiel, waren die 5 Zombie-Prozesse.
Antwort1
Es sieht so aus, als ob Sie irgendwo ein Ressourcenleck haben. Sie können „lsof“ ausführen, um eine Liste aller offenen Dateien zu erhalten (offensichtlich irgendwann, bevor Ihr System ausgehungert ist). Vergleichen Sie die Liste mit aktiven PIDs und Sie werden (vielleicht) den Übeltäter finden.
Ich würde auch vorschlagen, das Limit für geöffnete Dateien in /etc/security/limits.conf zu ändern (oder vielleicht woanders? Ich verfolge Ubuntu schon eine Weile nicht mehr und es gibt Spekulationen, dass limits.conf standardmäßig nicht geladen wird). Wenn Sie wirklich ein Ressourcenleck haben, wird das das Problem nur verlängern. Suchen Sie zuerst nach einem Leck.
Antwort2
Die Meldung „zu viele offene Dateien“ ist wahrscheinlich prozessspezifisch und kein systemweites Problem. Die Meldung „Speicher kann nicht zugewiesen werden“ könnte prozessspezifisch sein, ist aber wahrscheinlich systemweit.
Wie cydonian.monk bemerkte, gibt es ein Ressourcenleck irgendeiner Art. Der wahrscheinlichste Grund dafür ist ein außer Kontrolle geratener oder fehlerhaft funktionierender Prozess, der entweder wiederholt untergeordnete Elemente erzeugt oder einen Fehler oder Speicherverlust aufweist, der dazu führt, dass er wiederholt Dateien öffnet und/oder Speicher so stark zuweist, dass dem System der Speicher ausgeht.
Ich würde mich darauf konzentrieren, was Sie in dem einen Gnome-Terminalfenster gemacht haben, in dem zuerst die Meldung „zu viele Dateien geöffnet“ angezeigt wurde. Stellen Sie fest, was in/aus diesem Fenster ausgeführt wurde, und konzentrieren Sie sich auf das Verhalten. Wenn Sie „ps is cron“ alle paar Minuten ausführen oder top -b
die Ausgabe in einer Datei speichern, erhalten Sie möglicherweise einen Einblick in das, was vor sich ging, als der nächste Absturz auftrat.
Die oberste Ausgabe, die Sie bereitgestellt haben, sieht aus wie ein normal laufendes System.
Antwort3
Haben Sie versucht, die Obergrenze für die Anzahl der Dateien zu erhöhen?
Sie müssen diese Zeilen in /etc/security/limits.conf einfügen
* soft nofile 6000
* hard nofile 6000