fork: retry: Ressource vorübergehend nicht verfügbar [geschlossen]

80

Ich habe versucht, Intel MPI Benchmark auf meinem Computer zu installieren, und habe folgende Fehlermeldung erhalten:

fork: retry: Resource temporarily unavailable

Dann erhielt ich diesen Fehler erneut, als ich lief lsund topbefahl.

Was verursacht diesen Fehler?

Konfiguration meiner Maschine:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)
user1260391
quelle
Überprüfen Sie in Ihrer Linux-Dokumentation, wie Sie die Anzahl der Prozesse erhöhen können.
Theglauber
2
Vielleicht würde dies helfen: stackoverflow.com/questions/344203/…
theglauber

Antworten:

82

Dies wird häufig dadurch verursacht, dass keine Dateideskriptoren mehr vorhanden sind.

Es gibt das Gesamtlimit für Dateideskriptoren des Systems. Was erhalten Sie vom Befehl:

sysctl fs.file-nr

Dies gibt die Anzahl der Dateideskriptoren zurück:

<in_use> <unused_but_allocated> <maximum>

Führen Sie die folgenden Befehle aus, um herauszufinden, wie hoch die Dateideskriptorbeschränkung eines Benutzers ist:

sudo su - <username>
ulimit -Hn

Führen Sie den folgenden Befehl aus, um herauszufinden, wie viele Dateideskriptoren von einem Benutzer verwendet werden:

sudo lsof -u <username> 2>/dev/null | wc -l

Wenn Sie nun ein Problem mit der Beschränkung der Systemdateideskriptoren haben, müssen Sie Ihre Datei /etc/sysctl.conf bearbeiten und eine bereits vorhandene Zeile mit fs.file-max hinzufügen oder ändern und auf einen großen Wert setzen genug, um mit der Anzahl der benötigten Dateideskriptoren fertig zu werden und neu zu starten.

fs.file-max = 204708
Satish
quelle
15
Zu Ihrer Information, Sie können "sysctl -p" verwenden, um die aktuellen Einstellungen in /etc/sysctl.conf anzuwenden und den Neustart zu speichern.
EmmEff
2
Wenn Sie schreibgeschützt / etc haben, können Sie zur Laufzeit 'sysctl -w fs.file-max = 204708' verwenden.
Ondrej Galbavý
Sie können es auch direkt zum Kernel hinzufügen, ohne es neu zu starten, aber nicht dauerhaft 'echo 999999> / proc / sys / fs / file-max'
matson kepson
50

Eine andere Möglichkeit sind zu viele Threads. Diese Fehlermeldung ist gerade aufgetreten, als ein Test-Harness für eine App ausgeführt wurde, die einen Thread-Pool verwendet. Wir verwendeten

watch -n 5 -d "ps -eL <java_pid> | wc -l"

um die fortlaufende Anzahl nativer Linux-Threads zu beobachten, die innerhalb der angegebenen Java-Prozess-ID ausgeführt werden. Nach diesem Treffer von ungefähr 1.000 (für uns - YMMV) wurde die von Ihnen erwähnte Fehlermeldung angezeigt.

Roottraveller
quelle
2
Als ich getestet habe, habe ich ps -eLfür die Anzeige aller Prozesse gearbeitet und ps -L <pid>für die Anzeige von Prozessen in Bezug auf die <pid>. ps -eL <pid>zeigt nur alle Prozesse unabhängig von der <pid>.
Sanghyun Lee
1
@ Willie Wheeler Was hast du getan, um das Thread-Limit zu überwinden? Ich habe zahlreiche online gefundene Lösungen für DAYS gesucht und getestet, ohne Erfolg. Nichts erlaubt mehr als 1k Threads, außer einem Neustart von systemd-logind, der ungefähr eine Stunde dauert, bevor die Fehler erneut beginnen!
Brandon Elliott
Maschinen haben begrenzte Ressourcen. Wenn Sie ein Limit erreichen, verwenden Sie weniger Threads (z. B. mit Thread-Pool gesteuert) oder mehr Maschinen.
Ich habe meinen Rails-Server neu gestartet
Thananotto
2
1000 Threads sind jedoch nicht viel
Frankster