jps
查看系统中正在运行的JAVA进程
-v : 显示JAVA进程详细信息
jinfo [-pid]
查看JVM配置参数,动态修改部分JVM参数
-flags :打印当前指定java进程中已经设定的所有JVM参数信息
查看可动态修改的参数:java -XX:+PrintFlagsFinal -version | grep manageable
重点说明两个常用参数:
1. HeapDumpOnOutOfMemoryError :当JVM发生OOM时,自动生成dump文件
2. HeapDumpPath : 生成dump文件的路径 | 文件名称
线上环境发生OOM异常,如未设置这两个参数,要排查问题,就需要jmp来导出dump文件,可能会导致系统STW,
此时可以动态修改上面两个参数,当下次遇到OOM时,自动导出dump文件
开启参数:
布尔类型: jinfo -flag + -参数 pid
非布尔类型: jinfo -flag 参数名=参数值 pid
一般会在启动JAVA进程的时候,设置JVM参数在遇到OOM时自动导出dump
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
jmap (谨慎使用,会导致STW)
查询JAVA进程内存使用情况、生成dump文件
常用命令:
jmap -heap [pid] : 查看堆内存使用情况
jmap -dump:live,format=b,file=文件名 [pid] :导出dump文件
(面试中千万不要说在生产环境中使用jmap导出dump,自己品)
还有一些jstat、jstack等命令,不在此描述了,推荐大家使用 arthas进行调优或监控JVM
jvisualvm.exe(工具)
-
JDK自带的监控JVM工具,可以分析dump文件等等
Eclipse Memory Analyzer(工具)
- 堆内存分析工具,是JDK自带的堆分析工具jhat的一个非常好的替代品,能够快速地定位Java内存泄露等原因。