Question

J'utilise JBoss 5. Je constate que la mémoire continue d'augmenter avec le temps. Le nombre de threads actifs augmente. Le stacktrace suivant provient d'un thread actif qui est l'un des nombreux threads (il s'agit des threads ajoutés au fil du temps). Que puis-je apprendre de la pile? Comment puis-je aller plus loin et avoir une vision plus claire de ce qui se passe?

Nom: WorkManager (2) -92 État: WAITING sur java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52 Total bloqué: 1 Total attendu: 1

Trace de pile: sun.misc.Unsafe.park (Méthode native) java.util.concurrent.locks.LockSupport.park (LockSupport.java:158) java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await (AbstractQueuedSynchronizer.java:1925) java.util.concurrent.LinkedBlockingQueue.take (LinkedBlockingQueue.java:358) java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:947) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907) java.lang.Thread.run (Thread.java:619)

Merci, Tige

Était-ce utile?

La solution

Ce thread a l'air d'attendre getTask (), c'est-à-dire qu'il n'attend que du travail à faire.

De nouveaux threads apparaîtront au fur et à mesure que les demandes arriveront, vous ne devriez pas vous en inquiéter à moins qu'il y ait un grand nombre de threads occupés par du travail réel.

L'utilisation de la mémoire augmentera avec le temps jusqu'à ce que la JVM décide d'en récupérer une partie. S'il continue de croître et que l'exécution de GC à partir de jconsole ne fait aucune différence, il est possible que vous ayez une fuite de mémoire. Il peut être difficile de détecter les fuites, mais vous pouvez utiliser MAT pour simplifier les choses.

Autres conseils

Vous en apprendrez plus en exécutant JConsole à partir de JDK1.6 ou JDK1.7. JConsole.exe dans JDK1.5 est "old-school".

Je vous conseillerais de commencer par profiler avec jvisualvm . Vous obtiendrez des graphiques au fil du temps de l'utilisation du tas, des threads, de la récupération de place, etc.

Vous pouvez également effectuer un vidage de tas avec jmap , puis analysez avec jhat ou mat .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top