JVM线上问题排查过程

 

如果线上出现问题故障(比如:内存溢出,CPU过高,系统假死)时,一般排查流程

1. 在服务器上dump出应用信息文件(保留案发现场);

2.及时重启服务(首先要保证线上服务的可用性)。

3.分析代码和dump文件,找出问题。

4.修复代码问题,快速上线。

5.总结问题,避免下次再犯(向同事分享这次问题的过程)。

 

如何dump出Java应用问题文件?

 

一:找出系统中内存占用较大的对象;

1. 找出当前java应用pid:

  命令:jps 或 jps -v 或 jps -l

2. 打印当前java堆中各个对象的数量,大小。(注:只看前10的,可以加  | head -10 )

  命令:jmap -histo:live pid  > /tmp/a.txt

 

二:找出占用CPU最高的线程;

1. 用top命令查看是否java应用的CUP过高;

2. jps -l 找出java应用的pid;

3. 然后找到最高的线程PID(比如:16813):top -Hp pid

4. 将16813转换成16进制,即41ad (tips: printf "%x" 16813 ) ;

5. 找出最忙的线程池名"xxx":jstack pid | grep '41ad'

tips:

A. 或直接dump出线程的信息文件:jstack -l pid > jstack.log

B. 如果使用spring-boot的话,直接在浏览器里查看/dump端点,也可以达到类似jstack的效果。

 

三:其它

  1. 找出某个java应用打开的句柄数及线程数  

ll /proc/{pid}/fd | wc -l 查看打开的句柄数

ll /proc/{pid}/task | wc -l 查看线程数

 

   2. 使用jstat 查看GC情况

    用法:jstat -gc pid 采样间隔毫秒数,比如: jstat -gc 9300 3000,将每隔3s采样一次pid为9300的gc情况

    打印示例:

1 [stack@LO-U-JYB-SER01 ~]$ jstat -gc 9300 2000
2  S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
3 18432.0 17920.0 3998.1  0.0   645632.0 447557.5  360960.0   254368.0  118488.0 111102.0 14592.0 13152.8     24    0.996   5      0.676    1.672
4 18432.0 17920.0 3998.1  0.0   645632.0 448243.3  360960.0   254368.0  118488.0 111102.0 14592.0 13152.8     24    0.996   5      0.676    1.672

    标识说明:

 1 S0C - 新生代中第1块survivor 的容量(Survivor 0 Capacity),KB单位
 2 S1C - 新生代中第2块survivor 的容量(Survivor 1 Capacity),KB单位 
 3 S0U - 新生代中第1块survivor 已使用空间数(Survivor 0 Used),KB单位 
 4 S1U - 新生代中第2块survivor 已使用空间数(Survivor 0 Used),KB单位 
 5 EC - Eden区的容量(KB) 
 6 EU - Eden区已使用(KB数) 
 7 OC - Old区的容量(KB) 
 8 OU - Old区已使用(KB数) 
 9 MC - Metaspace容量(KB) 
10 MU - Metaspace已使用KB 
11 CCSC - 压缩类的内存容量(KB)
12 CCSU - 压缩类的已用容量(KB) 
13 YGC - (从应用启动算起,到采样时的) Young GC次数 
14 YGCT - (从应用启动算起,到采样时的) Young GC所用时间(秒) 
15 FGC - (从应用启动算起,到采样时的) Full GC次数 
16 FGCT - (从应用启动算起,到采样时的) Full GC所用时间(秒) 
17 GCT - (从应用启动算起,到采样时的) Yong GC + Full GC的总时间

 

posted @ 2019-07-26 11:05  YourBirthday-九筒  阅读(280)  评论(0)    收藏  举报