12

我想知道 Java 进程在某个时间使用的总堆大小是多少,我必须使用jmap.

的输出jmap -heap <pid>给了我这样的东西:

正在附加到进程 ID 2899,请稍候...
调试器连接成功。             
检测到服务器编译器。                   
JVM版本是14.2-b01                     

使用线程局部对象分配。
具有 2 个线程的并行 GC         

堆配置:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize = 1258291200 (1200.0MB)
   新大小 = 1048576 (1.0MB)      
   MaxNewSize = 4294901760 (4095.9375MB)
   OldSize = 4194304 (4.0MB)         
   新比率 = 8                       
   幸存者比率 = 8                       
   PermSize = 16777216 (16.0MB)       
   MaxPermSize = 67108864 (64.0MB)       

堆使用:
PS年轻一代
伊甸空间:        
   容量 = 119013376 (113.5MB)
   使用 = 117277608 (111.84464263916016MB)
   免费 = 1735768 (1.6553573608398438MB)
   98.54153536489882% 已使用
从太空:
   容量 = 131072 (0.125MB)
   使用 = 81920 (0.078125MB)
   免费 = 49152 (0.046875MB)
   62.5% 已使用
到太空:
   容量 = 131072 (0.125MB)
   使用 = 0 (0.0MB)
   免费 = 131072 (0.125MB)
   0.0% 已使用
PS老一代
   容量 = 954466304 (910.25MB)
   使用 = 80791792 (77.04905700683594MB)
   免费 = 873674512 (833.2009429931641MB)
   8.46460390077846% 已使用
PS烫发一代
   容量 = 57671680 (55.0MB)
   使用 = 41699008 (39.76727294921875MB)
   免费 = 15972672 (15.23272705078125MB)
   72.30413263494319% 已使用

我可以使用这些值的公式来找出使用的总内存吗?

欢迎其他关于如何在 Linux 上找到此问题的建议,但jmap优先于它们。

谢谢

4

2 回答 2

3

如果您试图jconsolejvisualvm显示“总堆使用量”的主窗口进行比较,我发现通过添加“使用的伊甸园空间”和“使用的 ps 老一代空间”,我得到了与该图显示的等效内容前面提到的程序——这就是我现在倾向于做的事情。

于 2010-07-12T15:59:24.840 回答
2

下面的条目Heap Usage:列出了 JVM 中的各种分区内存池,以及它们的最大大小、已用空间和可用空间。您可以将各种used:值相加,这应该为您提供总内存使用量的合理值,尽管列出的池中可能没有考虑一些 JVM 开销。

于 2010-02-24T08:35:53.130 回答