web-dev-qa-db-fra.com

Comment surveiller dynamiquement la taille du tas Java?

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

36
flyingfromchina

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

28
Jacob Schoen

Un grand nombre d'outils de profileur disponibles devraient vous aider. Votre outil commercial populaire est YourKit , et il obtient des critiques élogieuses. Une alternative gratuite est VisualVM , que j'ai utilisé par le passé et peut fournir de nombreuses informations.

13
Hank Gay
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

11
agonen

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

11
helios

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.

6
user1529891

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.

4
Carlos Heuberger

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

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

1
pschiffer

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.

0
Kees Jan Koster