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(info)

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(info), para facilitar a inicialização do teste.

  1. Crie um diretório e descompacte o arquivo .war
  2. É necessário conceder permissão de execução: chmod u+x start_thread_test.sh
  3. ./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

Only authorized users are allowed to upload new attachments.

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
« This page (revision-10) was last changed on 06-Jan-2009 09:55 by ClaudioMiranda [RSS]
G’day (anonymous guest) My Prefs

JSPWiki v2.6.3 [RSS]