Baseado no post abaixo resolvi criar uma script para abrir uma série de threads dentro do Linux , sendo assim podendo simular o Out of Memory : Cannot Create New Threds.
Post :
http://fajlinux.com.br/appserver/java-lado-do-so-out-of-memory-unable-to-create-new-native-thread/
1) Programa ThreadTest.java :
O programa pedirá um número de threds para serem criadas e será incrementado conforme preenchido com o número informado.
import java.util.Scanner; public class ThreadTest { public static void main(String [] args){ System.out.println("Digite o numero de threads para ser executadas : "); System.out.println(Thread.currentThread().getName()); Scanner in = new Scanner( System.in ); int threadNumber = in.nextInt(); for(int i=0; i<threadNumber;i++){ new Thread("" + i){ public void run(){ System.out.println("Thread:" + getName() + "running"); } }.start(); } } }
Compile o programa :
javac ThreadTest.java
2) Testes finais :
Baseado no post abaixo criei o script proc.sh para pegar o número de threads abertas no SO.
http://fajlinux.com.br/linux/script-monitorando-processos-abertos-pelo-usuario-no-so/
script proc.sh
#!/bin/bash threads=" `ps h -Led -o user | sort | uniq -c | sort -n | grep root | awk '{print $1}'`" processo="`pgrep -fl root | head -n1 | awk '{print $1}'`" echo $"Numeros de threads criadas pelo usuario JAVA --> `echo $threads`" echo "" echo "" echo $"Processo que o JAVA esta usando --> `echo $processo`" echo ""
ThreadTest.java sendo executado :
Monitorando com o proc.sh :
Obs: Os processos são controlados pela JVM / Sistema Operacional , não necessariamente serão iniciados na mesma hora que foram aberto, a idéia desta post é que se tenha como simular um erro de processamento para saber identificar e entender como se trata no SO a abertura de processos / threads.