当线上java服务处于无响应,或占用cpu过高时,可以使用以下命令排查问题
1.jps
使用jps -l查看完整的java进程ID和启动主类的包名或jar的完整路径
jps -v输出jvm完整参数
2.jstack
jstack -l pid 1>/tmp/jstack.log输出java进程的堆栈信息,-l打印关于锁的附加信息,当线程挂起,无法打印的时候,使用-F强制打印
查看打印信息时,着重查看deadlock和block方面的线程
3.jmap
打印java进程内存中所有对像的情况,参数:
-histo打印每个class的实例数目,内存占用,类全名信息,如果-histo:live,则只打印活着的对像信息
-heap打印heap的概要信息,包括gc算法,heap配置等
-permstat打印持久层信息,打印时间较长
4.jstat 查看jvm状态
(1)查看gc状态
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)