web-dev-qa-db-fra.com

Java: Comment vérifier la taille de la permanente / Permgen actuelle?

Hier, lorsque j'exécutais le serveur d'applications Weblogic 11G, j'ai rencontré une erreur de haut niveau, alors j'ai Googled pour la réponse:

Java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar

Tout a fonctionné :)

Cependant, lorsque je pense que deux fois sur la solution, j'ai peut-être commis une erreur: comment puis-je connaître les paramètres actuels de ceux-ci? J'ai certainement besoin de vérifier leurs valeurs avant de les remplacer, non?

Des pensées?

Lien associé: Les personnes dans n autre fil sur SO Approche d'essai et d'erreur suggérée, ce qui n'est pas idéal.

Merci d'avance.

17
Michael Mao

Vous pouvez vérifier les valeurs de tous les drapeaux JVM d'un JVM en cours d'exécution à l'aide de jinfo.exe utilitaire.

%Java_HOME%\bin\jinfo.exe -flag <flagName> <pid>

afin de vérifier la valeur de -XX:PermSize Option jvm que vous pouvez exécuter

%Java_HOME%\bin\jinfo.exe -flag PermSize <pid>

41
Strelok

Vous pouvez utiliser jmap AT ICI , c'est un outil de vidage en tas JVM.

par exemple:

jmap -heap 5900

Il va imprimer:

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 989855744 (944.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 242352128 (231.125MB)
   used     = 9196056 (8.770042419433594MB)
   free     = 233156072 (222.3549575805664MB)
   3.79450185805672% used
From Space:
   capacity = 41877504 (39.9375MB)
   used     = 0 (0.0MB)
   free     = 41877504 (39.9375MB)
   0.0% used
To Space:
   capacity = 42663936 (40.6875MB)
   used     = 0 (0.0MB)
   free     = 42663936 (40.6875MB)
   0.0% used
PS Old Generation
   capacity = 80609280 (76.875MB)
   used     = 34187936 (32.604156494140625MB)
   free     = 46421344 (44.270843505859375MB)
   42.41191088668699% used
PS Perm Generation
   capacity = 85393408 (81.4375MB)
   used     = 63472624 (60.53221130371094MB)
   free     = 21920784 (20.905288696289062MB)
   74.32965317416539% used

Il reçoit des informations de mémoire (y compris Permgen) .5900 est l'identifiant de processus de Java.

22
Alan

Vous pouvez utiliser quelque chose comme VisualVM, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh= , pour surveiller votre mémoire. Utilisation et vous verrez le Max par où il pict, et cela vous donnera des informations spécifiques sur la partie de la mémoire en réalité, vous pouvez mieux optimiser votre environnement.

Vous constaterez peut-être que une partie de la mémoire que vous ne pensez pas est en train de remplir, et en la surveillant, vous pouvez voir ce que vous devez faire pour obtenir une meilleure performance.

7
James Black

Une autre façon d'obtenir des informations Permgen est la suivante:

kill -3 Java_PID

Il reçoit des informations de vidage de thread et de mémoire (y compris Permgen). Exemple de sortie:

PSPermGen       total 68864K, used 68808K [0x000000009c600000, 0x00000000a0940000, 0x00000000a1800000)

Pour une raison quelconque Jinfo n'a pas fonctionné quand j'en avais besoin. Il est retourné:

Unable to open socket file: target process not responding or HotSpot VM not loaded

Il y a peu de causes possibles de ce qui précède et l'une d'entre elles peut être une déclaration explicite du Java.IO.TMPDIR comme décrit à HTTPS: //www.permeance.com.au/web/terry.mueller/home/-/blogs/Unable-to-open-socket-file-Target-Process-not-Revering-or-Hotspot-vm-not charlica

4
Jacek