Ich verwende einen Docker-Server unter Arch Linux (Kernel 4.3.3-2) mit mehreren Containern. Seit meinem letzten Neustart stürzen sowohl der Docker-Server als auch zufällige Programme in den Containern mit der Meldung ab, dass kein Thread erstellt werden kann oder (seltener) ein Zweig erstellt werden muss. Die spezifische Fehlermeldung ist je nach Programm unterschiedlich, aber die meisten scheinen den spezifischen Fehler zu erwähnen Resource temporarily unavailable
. Am Ende dieses Beitrags finden Sie einige Beispiele für Fehlermeldungen.
Jetzt gibt es viele Leute, die diese Fehlermeldung erhalten haben, und viele Antworten auf diese. Was wirklich frustrierend ist, ist, dass jeder darüber zu spekulieren scheint, wie das Problem gelöst werden könnte, aber niemand darauf hinzuweisen scheint, wie zu identifizieren ist, welche der vielen möglichen Ursachen für das Problem vorhanden sind.
Ich habe diese 5 möglichen Ursachen für den Fehler gesammelt und wie Sie überprüfen, ob sie auf meinem System nicht vorhanden sind:
- Es gibt ein systemweites Limit für die Anzahl der Threads, die in
/proc/sys/kernel/threads-max
( Quelle ) konfiguriert sind . In meinem Fall ist dies eingestellt auf60613
. - Jeder Thread nimmt etwas Platz im Stapel ein. Die Stapelgrößenbegrenzung wird mit
ulimit -s
( Quelle ) konfiguriert . Die Grenze für meine Schale verwendet werden8192
, aber ich habe es erhöht , indem sie* soft stack 32768
in/etc/security/limits.conf
, so dass erulimit -s
jetzt zurückkehrt32768
. Ich habe erhöht es auch für die Docker Prozess , indem sieLimitSTACK=33554432
in/etc/systemd/system/docker.service
( Quelle , und ich festgestellt , dass die Grenze , indem Sie gilt in/proc/<pid of docker>/limits
und durch Ausführen vonulimit -s
in einem Docker - Container. - Jeder Thread braucht etwas Gedächtnis. Ein virtuelles Speicherlimit wird mit konfiguriert
ulimit -v
. Auf meinem System ist es auf eingestelltunlimited
, und 80% meiner 3 GB Speicher sind frei. - Die Anzahl der verwendeten Prozesse ist begrenzt
ulimit -u
. Threads gelten in diesem Fall als Prozesse ( Quelle ). Auf meinem System ist das Limit auf festgelegt30306
, und für den Docker-Daemon und in Docker-Containern beträgt das Limit1048576
. Die Anzahl der aktuell ausgeführten Threads kann durch Ausführenls -1d /proc/*/task/* | wc -l
oder durch Ausführenps -elfT | wc -l
( Quelle ) ermittelt werden. Auf meinem System sind sie zwischen700
und800
. - Die Anzahl der geöffneten Dateien ist begrenzt, was laut einigen Quellen auch für das Erstellen von Threads relevant ist. Das Limit wird mit konfiguriert
ulimit -n
. Auf meinem System und in Docker ist das Limit auf festgelegt1048576
. Die Anzahl der geöffneten Dateien kann mitlsof | wc -l
( source ) ermittelt werden, auf meinem System geht es darum30000
.
Es sieht so aus, als ob ich vor dem letzten Neustart Kernel 4.2.5-1 ausgeführt habe, jetzt 4.3.3-2. Ein Downgrade auf 4.2.5-1 behebt alle Probleme. Andere Beiträge, die das Problem erwähnen, sind dies und das . Ich habe einen Fehlerbericht für Arch Linux geöffnet .
Was hat sich im Kernel geändert, das dies verursachen könnte?
Hier sind einige Beispielfehlermeldungen:
Crash dump was written to: erl_crash.dump
Failed to create aux thread
Jan 07 14:37:25 edeltraud docker[30625]: runtime/cgo: pthread_create failed: Resource temporarily unavailable
dpkg: unrecoverable fatal error, aborting:
fork failed: Resource temporarily unavailable
E: Sub-process /usr/bin/dpkg returned an error code (2)
test -z "/usr/include" || /usr/sbin/mkdir -p "/tmp/lib32-popt/pkg/lib32-popt/usr/include"
/bin/sh: fork: retry: Resource temporarily unavailable
/usr/bin/install -c -m 644 popt.h '/tmp/lib32-popt/pkg/lib32-popt/usr/include'
test -z "/usr/share/man/man3" || /usr/sbin/mkdir -p "/tmp/lib32-popt/pkg/lib32-popt/usr/share/man/man3"
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: No child processes
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: Resource temporarily unavailable
/bin/sh: fork: retry: No child processes
/bin/sh: fork: Resource temporarily unavailable
/bin/sh: fork: Resource temporarily unavailable
make[3]: *** [install-man3] Error 254
Jan 07 11:04:39 edeltraud docker[780]: time="2016-01-07T11:04:39.986684617+01:00" level=error msg="Error running container: [8] System error: fork/exec /proc/self/exe: resource temporarily unavailable"
[Wed Jan 06 23:20:33.701287 2016] [mpm_event:alert] [pid 217:tid 140325422335744] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread