Eine andere Möglichkeit sind zu viele Threads. Wir sind gerade auf diese Fehlermeldung gestoßen, als wir eine Testumgebung für eine App ausgeführt haben, die einen Thread-Pool verwendet. Wir haben
verwendetwatch -n 5 -d "ps -eL <java_pid> | wc -l"
um die fortlaufende Anzahl der nativen Linux-Threads zu beobachten, die innerhalb der angegebenen Java-Prozess-ID ausgeführt werden. Nachdem dieser Wert ungefähr 1.000 (für uns – YMMV) erreicht hatte, erhielten wir die von Ihnen erwähnte Fehlermeldung.
Dies wird häufig dadurch verursacht, dass keine Dateideskriptoren mehr vorhanden sind.
Es gibt das Gesamtdateideskriptor-Limit des Systems, was Sie von dem Befehl erhalten:
sysctl fs.file-nr
Dies gibt die Anzahl der Dateideskriptoren zurück:
<in_use> <unused_but_allocated> <maximum>
Um herauszufinden, wie hoch das Dateideskriptor-Limit eines Benutzers ist, führen Sie die folgenden Befehle aus:
sudo su - <username>
ulimit -Hn
Um herauszufinden, wie viele Dateideskriptoren von einem Benutzer verwendet werden, führen Sie den folgenden Befehl aus:
sudo lsof -u <username> 2>/dev/null | wc -l
Wenn Sie also ein Problem mit der Beschränkung der Systemdateideskriptoren haben, müssen Sie Ihre /etc/sysctl.conf-Datei bearbeiten und eine Zeile mit fs.file-max hinzufügen oder ändern, wenn sie bereits existiert, und sie 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