Найдите текущий размер кучи с помощью jmap

Я хотел бы узнать, каков общий размер кучи, который используется в определенное время процессом Java, и я должен использовать jmap.

Результат jmap -heap <pid> дает мне что-то вроде этого:

Attaching to process ID 2899, please wait...
Debugger attached successfully.             
Server compiler detected.                   
JVM version is 14.2-b01                     

using thread-local object allocation.
Parallel GC with 2 thread(s)         

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1258291200 (1200.0MB)
   NewSize          = 1048576 (1.0MB)      
   MaxNewSize       = 4294901760 (4095.9375MB)
   OldSize          = 4194304 (4.0MB)         
   NewRatio         = 8                       
   SurvivorRatio    = 8                       
   PermSize         = 16777216 (16.0MB)       
   MaxPermSize      = 67108864 (64.0MB)       

Heap Usage:
PS Young Generation
Eden Space:        
   capacity = 119013376 (113.5MB)
   used     = 117277608 (111.84464263916016MB)
   free     = 1735768 (1.6553573608398438MB)
   98.54153536489882% used
From Space:
   capacity = 131072 (0.125MB)
   used     = 81920 (0.078125MB)
   free     = 49152 (0.046875MB)
   62.5% used
To Space:
   capacity = 131072 (0.125MB)
   used     = 0 (0.0MB)
   free     = 131072 (0.125MB)
   0.0% used
PS Old Generation
   capacity = 954466304 (910.25MB)
   used     = 80791792 (77.04905700683594MB)
   free     = 873674512 (833.2009429931641MB)
   8.46460390077846% used
PS Perm Generation
   capacity = 57671680 (55.0MB)
   used     = 41699008 (39.76727294921875MB)
   free     = 15972672 (15.23272705078125MB)
   72.30413263494319% used

Могу ли я использовать формулу для этих значений, чтобы узнать общий объем используемой памяти?

Приветствуются другие предложения о том, как я могу узнать это в Linux, но jmap предпочтительнее.

Спасибо


person fmoga    schedule 24.02.2010    source источник


Ответы (2)


если вы пытаетесь сравнить с чем-то вроде jconsole или jvisualvm с главным окном, отображающим `` общее использование кучи '', я обнаружил, что, добавив `` используемое пространство eden '' и `` используемое пространство старого поколения ps '', я получил эквивалент того, что показывает этот график в вышеупомянутых программах - вот что я сейчас продолжаю

person eyberg    schedule 12.07.2010

Записи под Heap Usage: перечисляют различные пулы секционированной памяти в JVM, а также их максимальный размер, используемое и свободное пространство. Вы можете просто сложить различные значения used:, которые должны дать вам разумное значение для общего использования памяти, хотя могут быть некоторые накладные расходы JVM, которые не учитываются в перечисленных пулах.

person skaffman    schedule 24.02.2010
comment
Запуск jmap -heap:format=b <pid> и анализ файла дампа кучи с помощью средства анализа памяти из Eclipse дает мне общее использование 22 МБ. Я не могу найти способ получить такую ​​же общую стоимость ... - person fmoga; 24.02.2010
comment
@MelmanRo: Я предполагаю, что инструмент eclipse удалил все недостижимые (т.е. подлежащие сборке мусора) объекты из расчета, что является расчетом того, каким будет размер кучи , если бы полный GC развертка была запущена. Я утверждаю, что текущее фактическое использование памяти операционной системой - это сумма различных пулов, как я описал. - person skaffman; 24.02.2010
comment
Может ли это быть источником такой большой разницы? - person fmoga; 24.02.2010
comment
@MelmanRo: Это зависит от того, сколько оттока создает приложение. Возможно, да. - person skaffman; 24.02.2010