Obtenez de détection de blocage de l'exécution de programme ou de vidage en Java
J'ai un morceau de l'exécution du logiciel java qui est coincé. J'aimerais obtenir une vue à l'intérieur, mais ont eu aucune idée de comment faire cela.
Est-il un outil que je peux donner un PID et il va me dire où chaque thread est actuellement situé et peut-être quelques valeurs des variables? Je suis sous linux.
J'ai plus ou moins savoir ce qui est à l'origine du problème, mais il y a encore quelques cas possibles, à cet effet, en repérant ce serait sympa.
Je ne peux pas reproduire l'erreur, car il n'apparaît que quelques jours et n'est jamais apparu pendant le débogage, c'est donc un changement unique d'apprendre à connaître l'ennemi.
Des idées?
Peut-on changer le débogage à distance, pour la prochaine fois? c'est à dire stackoverflow.com/questions/138511/...
OriginalL'auteur Franz Kafka | 2011-11-14
Vous devez vous connecter pour publier un commentaire.
En fait, vous pouvez essayer d'utiliser visualvm + son fils de surveillance plugin. Vous serez également en mesure de faire un thread dump, vue thread traces de la pile de fourmi de leurs états. Vous pouvez également utiliser jconsole de détecter les blocages. Ces deux outils font partie du JDK.
Ici est quelques infos sur l'utilisation de visualvm pour le fil de l'analyse.
OriginalL'auteur szhem
Vous pouvez prendre un thread dump. Vous pouvez utiliser
kill -3 PID
où PID est votre ID de processus. Cela va entraîner le thread dump être sortie sur la sortie standard de votre programme.Cela va vous montrer ce que chaque thread est en train de faire, mais ne vous donnera pas toute info concernant les variables. Peu importe, le fil dumps sont vraiment utiles. Je commencerais par là. Si vous ne pouvez toujours pas résoudre le problème, vous pouvez utiliser quelque chose comme jmap (JVM outil gratuit, mais plus difficile à utiliser) ou YourKit (produit payant mais très bon) pour prendre un instantané de la mémoire, et d'examiner les variables.
Quelques infos sur jmap:
Java le profilage de la mémoire avec jmap et jhat
tuer -3 ne sera pas réellement tuer la JVM, il envoie un signal pour déclencher un thread dump. Le thread dump aller vers la sortie standard de la JVM (pas le std sortie de la commande kill). Assurez-vous simplement de la capture de la mst la sortie vers un fichier. Comment êtes-vous l'exécution de votre programme? C'est une application autonome, ou êtes-vous en cours d'exécution à l'intérieur d'un serveur d'application comme Tomcat? Par exemple, si vous utilisez Tomcat, le std sortie est dans les logs/catalina.. Si autonome, vous pouvez canaliser votre std sortie vers un fichier au démarrage de votre application avec quelque chose comme: "java-jar myjar.jar > la sortie.journal". Espérons que cette aide.
OriginalL'auteur Andres Olarte
Récente de la Jvm (OpenJDK/Oracle Java 7 ou au-dessus), si vous prenez un tas de vidage (à l'aide de VisualVM ou jmap), il comprend également un dump de la piles de tous les threads en cours d'exécution, avec des liens vers les objets correspondants dans le tas. Vous pouvez alors afficher les piles par l'ouverture de la heap dump dans VisualVM.
OriginalL'auteur James_pic