259 votes

Comment obtenir un vidage des threads et du tas d'un processus Java sous Windows qui n'est pas exécuté dans une console ?

J'ai une application Java que je lance à partir d'une console qui, à son tour, exécute un autre processus Java. Je veux obtenir un vidage de thread/heap de ce processus enfant.

Sous Unix, je pouvais faire un kill -3 <pid> mais sous Windows, la seule façon d'obtenir un vidage de fil est de faire Ctrl-Break dans la console. Mais cela ne me donne que le vidage du processus parent, pas du processus enfant.

Y a-t-il un autre moyen d'obtenir ce vidage de tas ?

0voto

rogerdpack Points 12806

Suivi de Visualvm :

Si vous ne pouvez pas vous connecter à votre JVM en cours d'exécution à partir de jvisualvm parce que vous ne l'avez pas démarrée avec les bons arguments JVM (et qu'elle est sur une machine distante), exécutez jstatd sur la machine distante, puis, en supposant que vous avez une connexion directe, ajoutez-la comme "hôte distant" dans visualvm, double-cliquez sur le nom de l'hôte, et toutes les autres JVM sur cette machine apparaîtront comme par magie dans visualvm.

Si vous ne disposez pas d'une "connexion directe" aux ports de cette boîte, vous pouvez également le faire par le biais d'une proxy .

Une fois que vous pouvez voir le processus que vous voulez, percez-le dans jvisualvm et utilisez l'onglet monitor -> bouton "heapdump".

-1voto

Suresh Ram Points 67

Sur un JDK Oracle, nous avons une commande appelée jmap (disponible dans le dossier bin de Java Home). L'utilisation de cette commande est la suivante

jmap (option) (pid)

Exemple : jmap -dump:live,format=b,file=heap.bin (pid)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X