java.lang.OutOfMemoryError : unable to create new native Thread: questo errore si presenta quando si cerca di avviare un applicativo java/scala con una specifica utenza e questa utenza non ha la possibilità di allocare il necessario numero di thread.
massimo numero di thread su una macchina linux:
simon@Itaca ~/vpn: cat /proc/sys/kernel/threads-max 254623
mentre analizzando nello specifica per l'utenza "simon" (con cui eseguo il comando):
simon@Itaca ~/vpn: ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127311 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 127311 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
numero di processi running:
simon@Itaca ~/vpn: ps -elf | wc -l 272
mentre il reale numero di thread:
simon@Itaca ~/vpn: ps -elfT | wc -l 901
per avere un elenco di thread in esecuzione da analizzare:
ps huH > elencothread.txt
Conclusioni: nello specifico i thread a mia disposizione sono ampiamente sufficienti, ma spesso negli ambienti enterprice si limita l'accesso alle risorse hardware per una specifica utenza di servizio, in quel caso la sequenza dei comandi proposti può aiutare ad eseguire una analisi per una eventuale segnalazione ai sistemisti.