2017-03-03 4 views
0

Avec la commande jmap, je peux voir les variables et leur état. De même, existe-t-il un outil open source pour enregistrer le code d'octet qui s'exécute dans la JVM? Bien que nous ayons le code source, il y a des moments où cela a changé - avec l'aide d'AOP par exemple. Il pourrait également y avoir différentes versions du code à l'exécution, comme par exemple un classpath qui a 2 versions d'un jar ...Java en cours d'exécution: voir le code d'octet à l'exécution d'un processus arbitraire

Le but est de pouvoir attacher à un processus sur mon système, et enregistrer l'état de la JVM incluant le code d'octet aux fichiers, pour une inspection plus poussée, sans rien changer dans le lanceur. Donc, nous nous connectons lorsque le processus est en cours d'exécution, sortez l'instantané et le détachement (pour ne pas trop perturber le système de production existant). Peut utiliser Open JDK ou Oracle JDK pour exécuter l'application.

+0

Jetez un oeil à cette réponse https://stackoverflow.com/questions/35146746/write-java-object-into-class-file. – SubOptimal

+0

@suboptimal merci. Je vais me renseigner. bien que nous n'utilisions pas CGLIB. verra sun.jvm.hotspot.HSDB bien que son énonciation ne puisse pas charger, même quand je le lance avec sudo sur mon local. – tgkprog

Répondre

1

commande suivante fonctionne avec Oracle JDK (ne pouvait pas tester avec OpenJDK)

java -cp ${JDK_HOME}/lib/sa-jdi.jar \ 
    -Dsun.jvm.hotspot.tools.jcore.filter=sun.jvm.hotspot.tools.jcore.PackageNameFilter \ 
    -Dsun.jvm.hotspot.tools.jcore.PackageNameFilter.pkgList=sub.optimal \ 
    sun.jvm.hotspot.tools.jcore.ClassDump \ 
    12345 

Ceci décharge de machine virtuelle Java avec toutes les classes pid 12345 de package sub.optimal. Les classes sont vidées dans le répertoire en cours sub/optimal/....

Note Le processus en cours d'exécution et l'exécutable java de commande ci-dessus doivent être de la même version JVM. Dans le cas contraire, il échouera avec une exception comme

VMVersionMismatchException: Supported versions are 25.112-b15. Target VM is 25.112-b6