运维线上问题处理

5/31/2020 QA

# QA线上问题处理

Q:线上发现某个子进程CPU占用持续过高,正常情况下是但时间的暂用过高,对该现象进行排查

A:使用jstack工具定位错误位置

原因:正则代码匹配问题,导致无线循环遍历匹配,子线程CPU占用过高

top # top命令,查看占用CPU过高的进程,居于首位的

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                           8713 prouser   20   0 9812m 2.3g  14m S 200.8  7.2  93:58.94 java 

top -H -p 进程ID # 查看改进程中,占用CPU高的线程
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                           8894 prouser   20   0 9812m 2.3g  14m R 99.8  7.2  21:28.33 java                                     
8928 prouser   20   0 9812m 2.3g  14m R 99.8  7.2  42:50.46 java

# 查看长时间占用CPU的线程,打印十进制线程ID,jstack 需要
printf "%x\n" 8894
22be

jstack 8713 | grep "22be" -A 1000 >jastack.log # 使用jstack工具,查看进程的近1000行日志输出到jastack.log日志文件,查看日志,定位错误位置
1
2
3
4
5
6
7
8
9
10
11
12
13