Thread 100%

2 respostas
S

Olá, possuo uma aplicação que está sendo executada pela linha de comando. E ao executar a mesma, em certo momento a cpu chega a 100% de utilização, como eu posso depurar para achar qual das threads está executando em 100%? Estava tentando utilizar o visualvm mas não estou me achando com ele.

Alguem teria mais alguma sugestão?

2 Respostas

M

Olá!

Tente usar algum profiler. Recomendo o JProfile (http://www.ej-technologies.com/products/jprofiler/overview.html), ele é pago, porém disponibilizam uma versão Trial que aparentemente não tem (pelo menos não tinha) ‘corte’ nenhum em relação a versão paga e conseguiu me atender perfeitamente.

WellingtonRamos

spiderman:
Olá, possuo uma aplicação que está sendo executada pela linha de comando. E ao executar a mesma, em certo momento a cpu chega a 100% de utilização, como eu posso depurar para achar qual das threads está executando em 100%? Estava tentando utilizar o visualvm mas não estou me achando com ele.

Alguem teria mais alguma sugestão?

Se não me engano, a Thread que vai a 100% é normalmente a que está mias tempo no estado Running e a que, nos tempos de CPU, é que ocupa o maior tempo.

Esse tipo de comportamento ocorre quando você está executando algum loop que espera alguma alteração no sistema para parar:

while( testaSeAlgumaCoisaOcorre() ) { //Enquanto essa alguma coisa não ocorre: // - você altera algumas variáveis // - você imprime algo na console // - Não faz o loop esperar um pouco a cada iteração // - como um Thread.sleep(10) // - ou wait(10). Neste caso, teria, talvez, a necessidade de um notify() // - Ou o pior dos cenários, não há nada implementado aqui. }
Exemplos:

while( testaSeAlgumaCoisaOcorre() ) { } while( testaSeAlgumaCoisaOcorre() ) { if(outraCoisaQueRetornaSempreFalso()) { variavel = getValor(); } } while( testaSeAlgumaCoisaOcorre() ) { if(outraCoisa()) { //AS vezes true, as vezes false variavel = getValor(); } }

Criado 9 de junho de 2011
Ultima resposta 9 de jun. de 2011
Respostas 2
Participantes 3