10
votes

Équivalent de décharge de base pour Java

Jusqu'à présent, j'ai appris à générer des vidages de fil et de tas de tas en utilisant jstack et et jmap respectivement.

Toutefois, Jstack Dump ne contient que des textes décrivant la pile sur chaque thread. Et ouvrir la vidage du tas (fichier .HProf) avec Java Visualvm affiche uniquement les objets alloués dans le tas.

Ce que je veux réellement, c'est de pouvoir voir la pile, de passer à un cadre de pile en particulier et de regarder des variables locales. Ce type de débogage post-mortem peut être effectué normalement avec des outils tels que WINDBG, GDB et un fichier principal (pour un programme natif C ++.)

Je me demande si un tel fichier "Core" (qui me permettra de déboguer dans un environnement non vivant) existe en Java?


0 commentaires

4 Réponses :


1
votes

Je ne pense pas que ce mécanisme de décharge existe dans Java standard.


0 commentaires

2
votes

J'ai trouvé des informations pertinentes dans un Sun Forum et dans un Discussion : Je n'ai pas eu beaucoup de chance avec ça, mais ça pourrait fonctionner dans votre cas.

Remarque: Certains des outils mentionnés sont des outils Java, mais ne sont pas pris en charge et ne sont pas disponibles sur les versions Windows de la JDK.


1 commentaires

Merci. Je pense que jsadebugd est très proche de ce que je cherche.



5
votes

Java fait. Si vous utilisez une machine virtuelle IBM, utilisez com.ibm.jvm.dump.systemdump () pour générer programme de manière programmable. Cela peut être débigué à l'aide d'un débogueur. Je crois que "tuer" votre processus Java devrait générer un dépotoir système aussi. Pour UNIX UTILISATION KILLE -4 PID Lorsque PID est l'ID de processus et pourrait être interrogé en tapant dans haut | grep java si vous avez 1 instance VM en cours d'exécution.

Vous pouvez également ajouter -xdump: système ou -xdump: tas etc sur votre ligne de commande Java pour filtrer les événements et générer des décharges sur certains événements tels que VM STOP (< Code> -XDummp: Système: Événements = VMSTOP ), Collections de déchets complets ( -XDump: Système: Événements = FullGC ), etc. Remarque, en fonction de la taille de votre tas, générer un vidage Sur une GC complète n'est peut-être pas une bonne idée (c'est-à-dire que vous pouvez créer 50 décharges avec 20 secondes si vous salifiez de 4 m à environ 60 m en 20 secondes) afin que vous puissiez ajouter un compteur comme -xdump: Système: événements = FullGC, plage = 50..55 qui générerait 5 cœurs entre le 50ème à la 55ème poubelle complète.


0 commentaires

1
votes

Certains systèmes d'exploitation (par exemple, Solaris MDB ou GDB sur Linux) en prise en charge à l'aide du débogueur natif normal sur les fichiers de vidage, avec un support spécial pour montrer des cadres de pile Java. Mais c'est assez hardcore et probablement pas ce que vous voulez, car il n'est pas bien intégré au débogueur Java.


0 commentaires