J'essaie de surveiller la taille du tas Java de manière dynamique. Est-ce que quelqu'un sait comment obtenir la mémoire maxmium utilisée dans le processus d'exécution d'un code? Est-ce que Runtime.maxMemory () fait l'affaire? Merci
maxMemory()
renvoie la quantité maximale de mémoire utilisée par Java. Cela ne vous donnera pas ce que vous voulez. totalMemory()
est ce que vous recherchez cependant. Voir le docs
jstat -gc <pid> <time> <amount>
jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3
3 échantillons 1 une seconde voir plus ici
Si vous le souhaitez, vous pouvez visualiser un grand nombre de valeurs définissant votre application avec JConsole.
http://docs.Oracle.com/javase/6/docs/technotes/tools/share/jconsole.html
Commencez votre application avec:
-Dcom.Sun.management.jmxremote
et votre application sera disponible pour sélectionner lorsque vous démarrez /bin/jconsole.exe
J'aimerais également ajouter que jmap -heap <PID>
fait l'affaire; cela suppose que vous êtes un gars des opérations et que vous avez besoin de savoir combien de temps le processus Java utilise. Je ne peux pas dire si votre question est programmatique ou opérationnelle.
Il existe également le package Java.lang.management . Utilisez ManagementFactory pour obtenir une instance MemoryMXBean
. Il dispose de méthodes pour renvoyer un instantané d'utilisation de mémoire tas et non-tas.
Peut-être que jvmtop mérite un coup d'œil ... C'est un outil en ligne de commande qui fournit une vue en direct de plusieurs mesures, notamment la taille du segment de mémoire:
JvmTop 0.4.1 alpha 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
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
Nous utilisons les applications internes xpert by OpNet pour surveiller l'utilisation du tas et les fuites en temps réel dans notre environnement de test de charge et notre production. Il est suffisamment léger pour ne pas avoir d'impact sur prod. Nous obtenons donc d'excellentes données impossibles à obtenir de l'assurance qualité. Nous établissons également le profilage des méthodes et des appels de base de données dans les deux environnements afin de nous aider à déterminer le code/sql à optimiser. Des articles très sympas avec de jolis tableaux de tendances, mais qui ne sont pas gratuits. Si vous avez beaucoup d'argent sur votre application, cela en vaut la peine.
http://www.opnet.com/solutions/application_performance/appinternals-xpert.html
Une autre alternative gratuite consiste à utiliser Java-monitor . Regardez cette démo live . Cliquez simplement sur l'un des serveurs pour afficher des graphiques détaillés sur la mémoire de tas, la mémoire non de tas, les descripteurs de fichier, les pools de bases de données et bien plus encore.