Outils pour surveiller l'exécution des threads java


J'ai une application Web java fonctionnant sur un serveur Tomcat(Linux). Dans l'environnement de production, je suis confronté à un problème de performance. À intervalles aléatoires, le processus jsvc sur lequel tomcat s'exécute commence à fonctionner à 90-100% CPU. Je suis incapable de trouver le déclencheur de cette manifestation. Le serveur est un système quad core. La consommation de mémoire n'indique aucune anomalie.

Comment puis-je surveiller quel thread(trace de pile d'application) dans l'application est à l'origine du problème?

Je suis vérification avec jconsoleet PSI Probe, mais les deux ne donnent aucune information détaillée sur le thread à l'intérieur de l'application qui provoque l'anomalie d'utilisation du PROCESSEUR.

Author: Derek Mahar, 2011-01-14

5 answers

Un moyen relativement facile de le faire (qui peut ou non fonctionner pour votre cas depends dépend de la durée du comportement):

Lorsque votre application affiche le comportement que vous souhaitez déboguer (dans ce cas, 90 à 100% d'utilisation du PROCESSEUR), utilisez jstack sur l'ID du processus:

Http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

Pour examiner quels threads sont en cours d'exécution et dans quelles méthodes ils se produisent. Si vous le faites plusieurs fois, il peut être relativement facile de repérer le chaîne d'appel coupable. Vous pouvez ensuite simplement déboguer l'entrée de cette chaîne.

Ce n'est pas nécessairement la meilleure ou la plus élégante méthode, mais c'est très facile à faire et c'est peut-être tout ce dont vous avez besoin. Je commencerais par là. C'est semblable à la philosophie" printf est le meilleur débogueur que j'ai jamais utilisé".

 5
Author: kvista, 2011-01-14 03:55:39

VisualVM est ce que vous cherchez. Il est livré avec des JDK plus récents et vous permet de surveiller l'utilisation des threads.

 4
Author: Matt, 2012-10-15 00:55:09

Vous pouvez obtenir un vidage stacktrace pour tous les threads de n'importe quelle application Java en lui envoyant un signal QUIT.

 kill -QUIT [processId]

Cela apparaîtra dans le processus' stdout.

 2
Author: Thilo, 2011-01-14 04:59:19

Un autre outil pour montrer les meilleurs threads consommant du processeur est jvmtop

 2
Author: MRalwasser, 2013-03-26 14:53:43

Juste mes 2 cents mais je me demande si vous n'expérimentez pas un problème de mémoire, les pics du PROCESSEUR pourraient être l'activité du GC. Donc, pendant que vous surveillez votre tomcat avec jconsole, consultez l'onglet mémoire et vérifiez si l'utilisation du tas ne va pas être élevée.

 1
Author: gabuzo, 2011-01-14 08:42:44