有没有办法通过添加 JVM args 来打印 Java 运行时内存信息
Posted
技术标签:
【中文标题】有没有办法通过添加 JVM args 来打印 Java 运行时内存信息【英文标题】:Is there any way to print Java runtime memory infomation by adding JVM args 【发布时间】:2022-01-22 16:56:42 【问题描述】:我想获取 JVM 提交的堆大小和实际使用量(峰值)。申请时间短。 有没有办法获取内存信息:
-
不使用
jmap
, jcmd
, ...(需要 pid)
不修改源代码(例如插入:Runtime.getRuntime() ...)
只需将参数传递给 JVM java -X:someargs ...
似乎在 jdk1.8 java -agentlib:hprof=heap
之前可以提供帮助,但是 hprof 被删除了。
【问题讨论】:
您可以配置 JVM 以在 GC 运行时打印出 GC 统计信息,但如果没有 1. 或 2,您可以做的只有 AFAIK。 顺便问一下……获取 JVM 的 pid 有什么困难?ps
或 jps
命令会告诉你它是什么。
@StephenC 谢谢你的建议~对于那些短时间的程序(非常快完成),我想执行这个'fetch pid & dump heap'并不容易。
【参考方案1】:
JDK 8
-XX:+PrintGCDetails
堆布局和使用情况将在 VM 退出时打印:
PSYoungGen total 443904K, used 283177K [0x00000000dcc00000, 0x00000000f7f00000, 0x0000000100000000)
eden space 442368K, 63% used [0x00000000dcc00000,0x00000000ee07a6f8,0x00000000f7c00000)
from space 1536K, 4% used [0x00000000f7d80000,0x00000000f7d90000,0x00000000f7f00000)
to space 1536K, 0% used [0x00000000f7c00000,0x00000000f7c00000,0x00000000f7d80000)
ParOldGen total 72704K, used 980K [0x0000000096400000, 0x000000009ab00000, 0x00000000dcc00000)
object space 72704K, 1% used [0x0000000096400000,0x00000000964f5060,0x000000009ab00000)
Metaspace used 4568K, capacity 4718K, committed 4992K, reserved 1056768K
class space used 472K, capacity 532K, committed 640K, reserved 1048576K
JDK 9+
-Xlog:gc+heap+exit
[9.405s][info][gc,heap,exit] garbage-first heap total 276480K, used 149668K [0x0000000700000000, 0x0000000800000000)
[9.405s][info][gc,heap,exit] region size 1024K, 147 young (150528K), 1 survivors (1024K)
[9.405s][info][gc,heap,exit] Metaspace used 6335K, capacity 6395K, committed 6784K, reserved 1056768K
[9.405s][info][gc,heap,exit] class space used 511K, capacity 530K, committed 640K, reserved 1048576K
total
是提交的内存;范围[0x0000000700000000, 0x0000000800000000)
是保留空间。
如果您想在每次 GC 时而不是在 VM 退出时打印堆,请使用
-XX:+PrintHeapAtGC
在 JDK 8 中,或 -Xlog:gc+heap=debug
在 JDK 9+ 中。
【讨论】:
谢谢你的回答,我会试试的!日志是总结了整个程序的整体堆内存信息,(我的意思是峰值)还是只是它退出时的状态? @Miao 退出时,不是峰值以上是关于有没有办法通过添加 JVM args 来打印 Java 运行时内存信息的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通过命令行将 JVM 参数传递给 Maven? [复制]
有没有办法通过不删除和添加 ItemsSource 来更新 ListBox 的项目? [关闭]