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 os arquivos:

thread-capacity.jar
NumThreads.java

É necessário o Java 5 (pois usa-se a classe java.util.concurrent.CyclicBarrier)

Características que influenciam a medição

  • Tamanho da pilha: -Xss
    Quanto menor, mais threads podem ser criadas. Verifiquei que um valor estável é 64k
  • Tamanho máximo do heap: -Xmx
  • Capacidade disponível da maquina para funcionar o teste
  • Em um ambiente de servidor real, o mesmo usa mecanismos de pool e prioridades, onde este teste não considera isso. Logo o sistema irá sempre suportar mais threads do que o resultado desta medição.

Foi observado que para ter uma medição mais acurada, recomenda-se usar mais de um processo para disparar o teste.

Como medir a quantidade de threads pelo sistema operacional

Linux
ps -efT|grep -v grep| grep -c thread-capacity

Solaris

prstat

Exemplo de invocação

java -jar -Xmx800m -Xss64k -jar thread-capacity.jar 30000

O último argumento é opcional.

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
java
NumThreads.java 6.0 kB 1 30-Jul-2008 00:53 ClaudioMiranda
« This page (revision-8) was last changed on 30-Jul-2008 00:53 by ClaudioMiranda [RSS]
G’day (anonymous guest) My Prefs

JSPWiki v2.6.3 [RSS]