L'analyse de thread dump d'un processus java

Que je dispose de Java EE en fonction de l'application en cours d'exécution sur tomcat et je vois que tout d'un coup, l'application se bloque au bout de quelques heures.

J'ai recueilli le thread dump de l'application juste avant qu'il se bloque et le mettre dans TDA pour l'analyse:

L'analyse de thread dump d'un processus java

TDA (Thread Dump de l'Analyseur) donne le message suivant pour le moniteur:

A lot of threads are waiting for this monitor to become available again.
This might indicate a congestion. You also should analyze other locks 
blocked by threads waiting for this monitor as there might be much more 
threads waiting for it.

Et voici le suivi de pile du thread mis en évidence ci-dessus:

"MY_THREAD" prio=10 tid=0x00007f97f1918800 nid=0x776a 
             waiting for monitor entry [0x00007f9819560000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.util.Hashtable.get(Hashtable.java:356)
    - locked <0x0000000680038b68> (a java.util.Properties)
    at java.util.Properties.getProperty(Properties.java:951)
    at java.lang.System.getProperty(System.java:709)
    at com.MyClass.myMethod(MyClass.java:344)

Je veux savoir quel est le "waiting for monitor entry" état signifie? Et également apprécie les pointeurs pour m'aider à déboguer ce problème.

  • Je cache les recherches de propriétés du Système plutôt que de l'appeler à plusieurs reprises de ce genre. Vous ne devriez pas besoin de Système d'appel.getProperty() plus d'une douzaine de fois au cours de la durée de vie de l'application. c'est à dire que vous devriez code, donc ce n'est pas un goulot de bouteille.
  • hmm.. bon point de Pierre!
InformationsquelleAutor peakit | 2012-07-05