2010-11-02 1 views
1

Il est assez simple d'effectuer une récupération de place sur une machine virtuelle Java en cours d'exécution en utilisant les outils jconsole ou jvisualvm fournis avec le JDK, et il est très agréable de pouvoir écrire des statistiques à l'aide de la commande jstat sur un système distant accès shell mais pas d'accès X11 ni d'accès RMI.Existe-t-il un outil Java scriptable qui peut effectuer une récupération de place sur une machine virtuelle Java en cours d'exécution?

Cependant, je n'ai trouvé aucun outil dans le JDK qui me permet d'effectuer un nettoyage de place sur un processus en cours que je peux invoquer à partir d'une session SSH sans un environnement DISPLAY.

Y a-t-il vraiment un tel outil de ligne de commande dans le JDK mais seulement des outils GUI qui ont le bouton "GC", ou est-ce que je manque quelque chose?

edit: Je sais que je pourrais écrire un tel outil. Et oui, je sais que la JVM fait GC quand elle doit le faire, alors répéter ce mantra n'aidera en rien. L'application tourne bien, et je veux simplement la pousser à voir combien de mémoire elle utilise sans la mettre hors ligne (pas de redémarrage de la JVM existante) ou déployer du nouveau code dans l'environnement où elle fonctionne parce que ce n'est pas quelque chose peut faire arriver à court terme. Faire des enquêtes comme ceci est une grande raison pour laquelle il existe des outils tels que jconsole et jvisualvm qui exécuteront GC lorsque vous cliquez sur le bouton GUI, mais ce serait bien de ne pas avoir à essayer de sauter à travers les arceaux X-forwarding juste pour effectuer une tâche simple .

+0

Quelque chose dans le JDK est ce que je suis après. Je pourrais facilement écrire un tel outil, mais cela prendrait beaucoup de temps à se déployer dans cet environnement particulier. – jbindel

Répondre

4

Vous pouvez créer un simple non-GUI application Java ou une Scala/JRuby/Jython/Groovy/quel que soit le script, pour établir une connexion JMX à votre machine virtuelle Java (server VM configuration, sample client code) et l'utiliser pour appeler le cadre de l'opération gc() le java.lang:type=Memory MBean (en supposant une JVM Sun/Oracle) à partir de la ligne de commande. Vous pouvez utiliser le même mécanisme pour récupérer les informations d'utilisation de la mémoire de certains des autres MBeans.

+0

Oui, c'est exactement ce que je ne veux pas faire maintenant parce qu'il faudrait des semaines pour que ce code soit déployé dans l'environnement où je veux faire des recherches. C'est pourquoi j'ai dit qu'il serait facile d'écrire un tel outil, mais je me demande pourquoi un tel outil n'existe pas dans le JDK, sauf pour ceux qui nécessitent une interface graphique. – jbindel

+0

Il pourrait être possible d'utiliser 'jrunscript', mais même cela pourrait nécessiter le déploiement de" code "dans cet environnement, et je n'ai vraiment pas cette option comme indiqué ci-dessus. – jbindel

+0

Barend, dites-vous, "Non, il n'y a pas un tel outil?" – jbindel

0

Il ne devrait pas être nécessaire d'utiliser un tel outil.

La machine virtuelle Java saura quand les ordures recueillir, il n'y a aucune raison de lancer la collection « de l'extérieur »

+0

Ce n'est pas pourquoi je veux faire la collecte des ordures. L'application fonctionne bien, merci. Je veux l'utiliser à des fins d'enquête, et je suis désolé si ce n'était pas complètement clair dans l'affichage original. – jbindel

Questions connexes