Quantidade máxima de threads suportada pelo sistema operacional
Este teste mede a capacidade máxima de threads suportado por um sistema (sistema operacional e hardware).
Rapidamente pensa-se que este é um teste simples, mas existem fatores que mudam o resultado consideravelmente, veja a próxima seção.
Pegue o arquivo thread-capacity-web.war
Este teste é compatível com o JDK 1.4 e depende da biblioteca util.concurrent desenvolvida pelo Doug Lea, pois no Java 1.4 ainda não existia o pacote java.util.concurrent.
Características que influenciam a medição
- Tamanho da pilha: -Xss
Quanto menor, mais threads podem ser criadas. - Tamanho máximo do heap: -Xmx
- Quantidade de memória disponível para o sistema operacional.
Em um ambiente de servidor Java EE real, o mesmo usa mecanismos de pool e prioridades de threads, onde este teste não considera isso.
Exemplo de invocação
Por linha de comando
Um script start_thread_test.sh (desculpem usuários windows) acompanha o thread-capacity-web.war
, para facilitar a inicialização do teste.
- Crie um diretório e descompacte o arquivo .war
- É necessário conceder permissão de execução: chmod u+x start_thread_test.sh
- ./start_thread_test.sh 2000 10
No exemplo acima, será feito um teste com 2000 threads, cada uma com 10 repetições.
Pelo servidor Java EE
Faça o deploy do .war no servidor e acesse http://localhost:8080/thread-capacity-web/
Troque o nome e porta de servidor de acordo com seu ambiente.
Como medir a quantidade de threads pelo sistema operacional
Linux
ps -p PID -o pid,user,%cpu,rss,vsize,size,etime,nlwp,comm
Veja na coluna NLWP
Solaris
prstat
Ao lado do nome do processo (a direita), está escrito o número de threds
java/232
Exemplo de saída
Os objetos que representam threads sao pre-alocados. Esta fase ocorre rapidamente. Mas ainda nao conta como o resultado. Aquecimento: 1 objetos pre-alocados Aquecimento: 181 objetos pre-alocados ... Na proxima fase as threads que foram pre-alocadas, serao usadas concorrentemente em calculos matematicos. E este resultado que ira contar na avaliacao da capacidade maxima de threads. 1 threads concorrentes 181 threads concorrentes 361 threads concorrentes ... As threads estao em processamento, espere um pouco. 180 threads terminadas com sucesso 360 threads terminadas com sucesso
Caso as threads sejam suportadas, irá aparecer a mensagem abaixo:
Todas as threads foram usadas com sucesso.
O sistema suporta 1800 threads simultaneamente
Caso o sistema não consiga executar todas as threads, surgirá uma mensagem de erro e a capacidade máxima de threads por processo.
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:574)
at NumThreads.main(NumThreads.java:44)
***** Houve um erro no processamento das threads. Veja a causa do erro imediatamente acima.
***** A capacidade maxima de eh: 32348 threads
Add new attachment
List of attachments
| Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
|---|---|---|---|---|---|---|
war |
thread-capacity-web.war | 209.0 kB | 1 | 06-Jan-2009 09:55 | ClaudioMiranda |