web-dev-qa-db-fra.com

Les données de jconsole peuvent-elles être extraites de la ligne de commande?

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

29
Jonathan

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

12
Kevin

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.

Exemple de sortie du mode de vue d'ensemble VM:

 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
9
MRalwasser

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.

7
matt b

Vous pouvez utiliser cet outil de requête jmx en ligne de commande: http://crawler.archive.org/cmdline-jmxclient/

7
user2427

Voici quelques autres outils CLI utiles pour surveiller une application Java:

  • Jmxterm qui donne un accès complet à tous les MBeans du serveur d'applications, s'exécute de manière interactive ou non,
  • jmxbox qui ne peut se connecter que via un socket TCP, pas directement à un processus local avec son PID
5
Tonin

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:

  • processus jvm
  • utilisation du processeur et du GC
  • utilisation et taille du tas
  • fils supérieurs

Les métriques et les graphiques sont mis à jour lorsque l'outil est ouvert.

Échantillon:  jvm-mon

3
Andrejs

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.

2
Sbodd

Ceci est une réponse partielle à votre question:

set Java_OPTS=%Java_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m 
0
djangofan

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 ).

0
llama