java linux查看线程问题

当线上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)         


版权声明:本文为feiying00544原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。