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
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 里

浙公网安备 33010602011771号