jvm命令很多,有一篇博客整理的非常全 https://www.cnblogs.com/ityouknow/p/5714703.html。我只列举一些常用的排错用到的。
jps -l -v
查看系统所有java(虚拟机)进程的信息。所在位置、启动执行的JVM参数。
jstat
jstat -gc [hostid] [ms] [count]
(jstat -gcutil [hostid] [ms] [count] )
查看jvm进程hostid的垃圾回收统计概述
- S0C : survivor0区的总容量
- S1C : survivor1区的总容量
- S0U : survivor0区已使用的容量
- S1C : survivor1区已使用的容量
- EC : Eden区的总容量
- EU : Eden区已使用的容量
- OC : Old区的总容量
- OU : Old区已使用的容量
- PC 当前perm的容量 (KB)
- PU perm的使用 (KB)
- YGC : 新生代垃圾回收次数
- YGCT : 新生代垃圾回收时间
- FGC : 老年代垃圾回收次数
- FGCT : 老年代垃圾回收时间
- GCT : 垃圾回收总消耗时间
jmap
jmap -dump:live,format=b,file=/test/test/test.hprof pid
输出dump文件到/test/test/test
jmap -histo:live pid| more
打印前10行,根据占用空间大小排序。
jmap -histo:live pid| grep redis
打印出redis实例的一些信息
jstack
jstack [option] pid
- -F : 当正常输出请求不被响应时,强制输出线程堆栈
- -l : 除堆栈外,显示关于锁的附加信息
- -m : 如果调用到本地方法的话,可以显示C/C++的堆栈
分析jstack输出信息:http://www.hollischuang.com/archives/110
jinfo
jinfo [option] pid
- -flag : 输出指定args参数的值
- -flags : 不需要args参数,输出所有JVM参数的值
- -sysprops : 输出系统属性,等同于System.getProperties()