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 30000O ú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
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 |