Java: как проверить текущий размер Perm / PermGen? - PullRequest
16 голосов
/ 16 сентября 2010

Вчера, когда я запускал установщик WebLogic Application Server 11g, я столкнулся с ошибкой OutOfMemory, поэтому я гуглил ответ:

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

Все работало:)

Однако, когдаЯ дважды подумал о решении, возможно, я ошибся: как узнать текущие настройки этих?Я, конечно, должен проверить их значения, прежде чем переопределить их, верно?

Есть мысли?

Ссылка по теме: Люди в В другой теме на SO предлагается метод проб и ошибок, который не идеален.

Большое спасибо заранее.

Ответы [ 4 ]

41 голосов
/ 16 сентября 2010

Вы можете проверить значения любых флагов JVM работающей JVM с помощью утилиты jinfo.exe.

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

, чтобы проверить значение опции -XX:PermSize JVM, вы можете запустить

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

20 голосов
/ 05 июня 2014

Вы можете использовать jmap в здесь , это инструмент JVM Heap Dump.

например:

jmap -heap 5900

Будет напечатано:

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

Получает информацию о памяти (включая PermGen). 5900 - это идентификатор процесса Java.

7 голосов
/ 16 сентября 2010

Вы можете использовать что-то вроде VisualVM, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh=0,, чтобы отслеживать использование вашей памяти, и вы увидите максимум по тому, где он достигает пика, и он даст вам конкретную информацию о том, какая часть памяти фактически заполнена, поэтомуВы можете лучше оптимизировать свою среду.

Вы можете обнаружить, что некоторая часть памяти, о которой вы не думаете, на самом деле заполняется, и, отслеживая ее, вы можете увидеть, что вам нужно сделать, чтобы повысить производительность.

4 голосов
/ 31 марта 2014

Другой способ получить информацию о PermGen:

kill -3 JAVA_PID

Он получает дамп потока и информацию о памяти (включая PermGen).Пример вывода:

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

По некоторым причинам jinfo не работало, когда мне это было нужно.Он вернул:

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

Существует несколько возможных причин вышеуказанного, и одной из них может быть явное объявление java.io.tmpdir , как описано в https://www.permeance.com.au/web/terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded

...