Un'altra possibilità è troppi thread. Abbiamo appena riscontrato questo messaggio di errore durante l'esecuzione di un test harness su un'app che utilizza un pool di thread. Abbiamo usato
watch -n 5 -d "ps -eL <java_pid> | wc -l"
per monitorare il conteggio in corso dei thread nativi di Linux in esecuzione all'interno dell'ID di processo Java specificato. Dopo questo successo di circa 1.000 (per noi - YMMV), abbiamo iniziato a ricevere il messaggio di errore che hai menzionato.
Ciò è comunemente causato dall'esaurimento dei descrittori di file.
C'è il limite del descrittore di file totale di sistema, cosa ottieni dal comando:
sysctl fs.file-nr
Questo restituisce i conteggi dei descrittori di file:
<in_use> <unused_but_allocated> <maximum>
Per scoprire qual è il limite di un descrittore di file degli utenti, eseguire i comandi:
sudo su - <username>
ulimit -Hn
Per scoprire quanti descrittori di file sono utilizzati da un utente eseguire il comando:
sudo lsof -u <username> 2>/dev/null | wc -l
Quindi ora se stai riscontrando un problema con il limite del descrittore di file di sistema dovrai modificare il tuo file /etc/sysctl.conf e aggiungere, o modificarlo se esiste già, una riga con fs.file-max e impostarlo su un valore grande sufficiente per gestire il numero di descrittori di file necessari e riavviare.
fs.file-max = 204708