JVM调试命令
JVM调试命令
参数类型
标准参数
-help,-version
X参数
-Xint 解释执行
第一次本地执行
-Xmixed 混合模式
XX参数
-XX:+PrintFlagsInitial 查看JVM的初始化参数
-XX:+PrintFlagsFinal 查看JVM的运行参数
JVM参数有很多,只需要记住一些关键的即可。平时多积累知道有哪些参数就可以。忘记的话直接使用-help即可。也可以查看官网Java命令官网说明
也可以使用java -XX:+PrintFlagsFinal pid
对常用命令进行总结
常用命令
jps [-ll]
查看运行中的java进程,快速找到需要的java进程id
-ll 查看详细的class名
jinfo
查看java的信息
命令比较简单,主要查看某些命令的配置参数jinfo -flags [pid]
可查看一些基础命令
jstat 查看JVM的统计信息
jstat -<option> [-t] [-h] [<interval> [<count>]]
- option:参数
- -t:添加一个时间戳参数
- -h:指定多少行输出一次表头
- interval:执行每次的间隔时间,单位为毫秒
- count: 用于指定输出多少次记录,缺省则会一直打印
option的参数有很多
- -class 显示ClassLoad的相关信息;
- -compiler 显示JIT编译的相关信息;
- -gc 显示和gc相关的堆信息;
- -gccapacity 显示各个代的容量以及使用情况;
- -gcmetacapacity 显示metaspace的大小
- -gcnew 显示新生代信息;
- -gcnewcapacity 显示新生代大小和使用情况;
- -gcold 显示老年代和永久代的信息;
- -gcoldcapacity 显示老年代的大小;
- -gcutil 显示垃圾收集信息;
- -gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
- -printcompilation 输出JIT编译的方法信息;
重点说一下-gc
执行以上命令就可以查看gc相关的堆信息,我写的每秒刷新一次。一共10次
- S0C、S2C、S0U、S1U:S0和S1的总量和使用量
- EC、EU:Eden区的总量和使用量
- OC、OU:Old区的总量和使用量
- MC、MU:Metaspace区的总量和使用量
- CCSC、CCSU:压缩类控件总量和使用量
- YGC、YGCT:YoungGC的次数和时间
- FGC、FGCT:FullGC的次数和时间
- GCT:总的GC时间
也可以在项目中加入XX参数,当出现gc时,自动写入日志,注意日志的文件夹必须提前创建。
1 | -XX:+PrintGC 输出GC日志 |
jmap
jmap主要用于查看JVM内存信息。主要还可以到处dump文件。利用MAT来分析内存溢出
1 | jmap -dump:format=b,file=help.hprof 9480 |
也可以在项目中加入XX参数。在项目出现内存溢出时,自动导出dump。
1 | -XX:+HelpDumpOnOutOfMemoryError |
jstack
jstack 主要是用于打印线程,检查死锁和死循环
jstack [pid] 如果程序中存在死锁和死循环。最后一行一般是可以看到的。
实际中可以使用 jstack [pid] > aaa.txt 将其输出到文件中再仔细研究问题。也可以的
- NEW 线程还没有启动
- RUNNALE 准备启动
- BLACKED 等待锁中获取,以执行
- WAITING 等待中
- TIMED WAITING 等待中
- TERMINATED 退出
远程监控
jvisualVM 监控java进程
远程监控时需要添加以下参数
1 | -Dcom.sun.management.jmxremote |
原文作者: duteliang
原文链接: http://yoursite.com/2019/03/12/jvm/JVM调试命令/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)