Puis-je vérifier l'utilisation de la machine virtuelle en train de contenir une pile JVM en cours d'exécution, je parle de l'utilisation réelle plutôt que du montant maximal alloué avec Xmx.
J'ai besoin que ce soit en ligne de commande car je n'ai pas accès à un environnement Windows, et je veux un script basé sur la valeur, l'application s'exécute sur le serveur d'applications Jetty.
Vous pouvez utiliser jstat, comme:
jstat -gc pid
Documents complets ici: http://docs.Oracle.com/javase/7/docs/technotes/tools/share/jstat.html
Pour Java 8, vous pouvez utiliser la ligne de commande suivante pour obtenir l'utilisation de l'espace de mémoire en Ko:
jstat -gc <PID> | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]; print sum}'
La commande résume en gros:
Vous pouvez également vouloir inclure le métaspace et l'utilisation de l'espace de classe compressé. Dans ce cas, vous devez ajouter un [10] et un [12] à la somme awk.
Si vous démarrez l'exécution avec la journalisation gc activée, vous obtenez les informations sur le fichier . Sinon, 'jmap -heap' vous donnera ce que vous voulez . Voir la page du document jmap pour plus d'informations.
Veuillez noter que jmap
devrait not être utilisé dans un environnement de production, sauf en cas d'absolue nécessité, car l'outil arrête l'application pour permettre de déterminer l'utilisation réelle du segment de mémoire. Généralement, cela n'est pas souhaité dans un environnement de production.
Toutes les procédures à la fois. Basé sur la réponse de @Till Schäfer.
En KB ...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=a[3]+a[4]+a[6]+a[8]+a[10]+a[12]; print sum}'
En MB ...
jstat -gc $(ps axf | egrep -i "*/bin/Java *" | egrep -v grep | awk '{print $1}') | tail -n 1 | awk '{split($0,a," "); sum=(a[3]+a[4]+a[6]+a[8]+a[10]+a[12])/1024; print sum" MB"}'
"Awk sum" référence:
a[1] - S0C
a[2] - S1C
a[3] - S0U
a[4] - S1U
a[5] - EC
a[6] - EU
a[7] - OC
a[8] - OU
a[9] - PC
a[10] - PU
a[11] - YGC
a[12] - YGCT
a[13] - FGC
a[14] - FGCT
a[15] - GCT
Merci!
NOTE: Fonctionne pour OpenJDK!
AUTRE QUESTION: Mauvaise information?
Si vous vérifiez l'utilisation de la mémoire avec la commande ps
, vous verrez que le processus Java consomme beaucoup plus ...
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1