Question

Un jour, notre application Web Java va à 100% d'utilisation du processeur. Un redémarrage a résolu l'incident mais pas le problème car quelques heures après le retour du problème. Nous avons soupçonné une boucle infinie introduite par une nouvelle version, mais nous n'avons apporté aucun changement sur le code ou sur le serveur.

Nous avons réussi à trouver le problème en faisant plusieurs vidages de threads avec Kill -quit et en regardant et en comparant tous les détails du fil. Nous avons constaté qu'une pile d'appels de thread apparaît dans tous les vidages de fil. Après l'analyse, il y avait une condition de boucle de temps qui ne devient jamais fausse pour certaines données qui ont été régulièrement mises à jour dans la base de données.

L'analyse de plusieurs vitesses de threads d'application Web est vraiment fastidieuse.

Connaissez-vous donc une meilleure façon ou outils pour trouver un tel problème dans un environnement de production?

Était-ce utile?

La solution

Après quelques requêtes, j'ai trouvé une réponse en Surveillance et gestion des applications de plate-forme Java SE 6 :

Vous pouvez diagnostiquer le thread en boucle en utilisant l'outil fourni par JDK appelé JTOP qui affichera le temps CPU que chaque thread utilise: enter image description here

Avec le nom de thread, vous pouvez trouver la trace de pile de ce fil dans l'onglet «Threads» en faisant un vidage de thread avec un kill -quit.

Vous pouvez maintenant vous concentrer sur le code qui provoque la boucle infinie.

PS.: Il semble acceptable de répondre à ma propre question selon http://blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/ : […] "Oui, c'est OK et même encouragé à répondre à vos propres questions, si vous trouvez une bonne réponse avant quelqu'un d'autre." […]

PS.: Au cas où le domaine Sun.com n'existera plus: vous pouvez exécuter JTOP comme une interface graphique autonome:

$ <JDK>/bin/java -jar <JDK>/demo/management/JTop/JTop.jar

Alternativement, vous pouvez l'exécuter comme un plug-in jconsole:

$ <JDK>/bin/jconsole -pluginpath <JDK>/demo/management/JTop/JTop.jar 

Autres conseils

Correction du problème avant qu'il ne se produise! Utilisez un outil d'analyse statique comme Findbugs ou PMD Dans le cadre de votre système de construction. Cela ne trouvera pas tout, mais c'est une bonne première étape.

Pensez à utiliser des outils de couverture comme Cobertura. Cela vous aurait montré que vous n'avez pas testé ces chemins de code.

Tester SH. Comme cela peut devenir vraiment lourd, alors essayez d'éviter cela en introduisant des mesures de qualité.

Quoi qu'il en soit, des outils comme VisualVM vous donneront un bel aperçu de tous les fils, il devient donc relativement facile d'identifier les fils qui fonctionnent pendant une longue période de manière inattendue.

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