【问题标题】:Find current heap size with jmap使用 jmap 查找当前堆大小
【发布时间】:2010-02-24 08:25:30
【问题描述】:

我想知道某个时间 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 比他们更受欢迎。

谢谢

【问题讨论】:

    标签: java linux memory jmap


    【解决方案1】:

    如果你想与 jconsolejvisualvm 之类的东西进行比较,主窗口显示“总堆使用量”,我发现通过添加“使用的伊甸园空间”和“使用的 ps 老一代空间”我得到了相当于上述程序中该图显示的内容——这就是我现在倾向于继续的内容。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 运行 jmap -heap:format=b <pid> 并使用 Eclipse 的内存分析工具解析堆转储文件,我总共使用了 22Mb。我找不到获得相同总值的方法...
      • @MelmanRo:我的猜测是 Eclipse 工具从计算中删除了所有不可访问(即要被垃圾收集)的对象,这是对堆大小的计算将 如果运行了完整的 GC 扫描。我认为当前的实际操作系统内存使用量是我所描述的各种池的总和。
      • 这会是造成如此大差异的根源吗?
      • @MelmanRo:这取决于应用程序正在创建多少流失。有可能,是的。
      猜你喜欢
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2011-01-02
      • 2014-06-19
      • 2015-03-11
      • 2012-02-20
      相关资源
      最近更新 更多