JVM运行内存情况查看

ps -ef | grep "java"
找到定开服务PID

jmap -heap PID
可以看到对应jvm 内存分配情况

1.先确认 Java 进程 ID
cmd编辑
jps -l
或者在任务管理器里找到 java.exe 对应的 PID。

2.导出线程日志 / 线程栈
cmd编辑
jstack -l 12345 > C:\dump\threaddump_12345.txt
如果进程卡死、正常 jstack 没响应,可以试:
cmd编辑
jstack -F 12345 > C:\dump\threaddump_force.txt
线程日志适合排查:线程阻塞、死锁、CPU 高、接口长时间 hang。

或者

导出线程dump
jstack -l > thread_dump.txt

3.导出内存日志 / 堆快照
优先用 jcmd:
cmd编辑
jcmd 12345 GC.heap_dump C:\dump\heapdump_12345.hprof
如果 JDK 版本较老,也可以用:
cmd编辑
jmap -dump:format=b,file=C:\dump\heapdump_12345.hprof 12345
注意:高版本 JDK 里 jmap 可能已被废弃或移除,所以优先 jcmd。

或者

导出内存dump
jmap -dump:format=b,file=heap_dump.hprof

4.只导出 JVM 运行统计
如果只是想看 GC、堆使用率,不一定要 dump:
cmd编辑
jstat -gcutil 12345 1000 10
或
jstat -gccause 12345 1000 10

可以看到对应jvm 内存分配情况:
jmap -heap PID

5.分析文件
.hprof 堆快照:用 Eclipse MAT 或 VisualVM 分析。线程栈:用文本编辑器打开,重点看 BLOCKED、WAITING、deadlock。注意
dump 堆内存时进程可能会短暂停顿,生产环境尽量低峰操作。堆越大,hprof 文件越大,注意磁盘空间。如果 jstack、jmap、jcmd 找不到,说明当前环境没有装完整 JDK,或者没有把 JDK bin 目录加到 PATH 里

posted @ 2025-12-09 17:59  栋_RevoL  阅读(12)  评论(0)    收藏  举报