J'utilise actuellement jconsole
pour surveiller les métriques de performance de mon application Java et aimerais script cet acquisition de données.
Existe-t-il un moyen de récupérer ces métriques VM (utilisation de la mémoire heap, nombre de threads, utilisation du processeur, etc.) à STDOUT
?
Les données dans top -p PID -b -n 1
ne les coupent pas vraiment.
Merci
jconsole fournit simplement un wrapper autour des MBeans JMX qui se trouvent dans le MBeanServer de la plateforme.
Vous pouvez écrire un programme pour vous connecter à votre VM en utilisant Attach API , qui interrogerait ensuite les MBeans.
Ou vous pouvez exposer la plate-forme MBeanServer sur RMI et interroger les MBeans de cette façon.
Voir le Java.lang.management package pour plus d'informations
Peut-être que jvmtop vaut le détour.
C’est un outil de ligne de commande qui fournit un live-view pour plusieurs métriques.
JvmTop 0.4.1 AMD64 8 cpus, Linux 2.6.32-27, load avg 0.12
http://code.google.com/p/jvmtop
PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL
3370 rapperSimpleApp 165m 455m 109m 176m 0.12% 0.00% S6U37 web 21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager 11m 28m 23m 130m 0.00% 0.00% S6U37 web 31
19187 m.jvmtop.JvmTop 20m 3544m 13m 130m 0.93% 0.47% S6U37 web 20
16733 artup.Bootstrap 159m 455m 166m 304m 0.12% 0.00% S6U37 web 46
Examinez jmap
, qui peut être utilisé pour effectuer un vidage de tas à partir de la console.
Pour les données non traitées dans le tas, je pense que jconsole utilise simplement JMX pour se connecter à la JVM en cours d’exécution afin d’obtenir des statistiques. Il est donc probablement possible de créer votre propre application pouvant extraire ces mêmes types de statistiques de JMX.
Vous pouvez utiliser cet outil de requête jmx en ligne de commande: http://crawler.archive.org/cmdline-jmxclient/
Voici quelques autres outils CLI utiles pour surveiller une application Java:
Vous pourriez trouver jvm-mon utile pour cela. C'est un outil de surveillance de la machine virtuelle Java pour la ligne de commande qui désinitialise:
Les métriques et les graphiques sont mis à jour lorsque l'outil est ouvert.
jstack offre un certain nombre de bits d’information utiles dans sa sortie normale. L'utilisation de la mémoire de tas est directement disponible, ventilée par région du GC; le nombre de threads pourrait être déterminé avec un peu de Perl/grep/etc.
Ceci est une réponse partielle à votre question:
set Java_OPTS=%Java_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m
J'ai utilisé avec succès jmxproxy Tomcat pour l'accès à partir de scripts ( http://Tomcat.Apache.org/Tomcat-6.0-doc/manager-howto.html#Using_the_JMX_Proxy_Servlet ).
Je n'en ai utilisé aucun, mais l'un des projets jmx-rest peut être une option pour un serveur autre que Tomcat ( http://www.google.com/search?q=jmx+rest ).