summaryrefslogtreecommitdiff
path: root/常见问题排查手册.md
blob: ad4189558ae47c21245f99ce4b462b2c1e349e2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 问题排查手册

## 1. 应用CPU过高

- 采用 top 命令,找出 CPU 占用最高的进程 PID;

- 通过 ps -ef | grep PID 查看对应的应用

- 采用 jstack -l  PID >> PID.log 获取进程的堆栈信息;

- 采用 ps -mp PID -o THREAD,tid,time 拿到占用 CPU 最高的线程 tid;

- 采用 printf "%x\n" tid 获取 16 进制的线程 TID;

- 采用 grep TID -A20 PID.log 确定是线程哪儿出了问题。

  

## 2. 应用内存溢出

- 采用 top 命令,找出应用对应的 PID;
- 采用 jmap -heap PID 确认一下分配的内存少不少;
- 采用 jmap -histo:live PID | more 找出分析最耗内存的对象【留意占用多少G的对象】;
- 采用 ps -efL | grep PID | wc -l 查看进程创建的线程数;
- 采用 ll /proc/PID/task | wc -l 也可以查看进程创建的线程数;
- 采用 netstat -apn | grep PID | wc -l 查看进程网络连接数。

解决方法可参考:

- 如果内存分配确实小,适当调整内存;
- 对象被频繁创建,且不释放,优化代码;
- 不断创建线程或者不断进行网络连接,优化代码。



## 3. 排查业务问题

- 采用 tail -fn 200 log_file 实时查询线上日志;
- 找准日志搜所关键字keyWord,例如 orderId、mobileId、reqId 等;
- 采用 grep keyWord log_file 查询关键字所在的行的日志;
- 采用 grep -C n keyWord log_file 匹配关键字所在行的上下 n 行;
- 采用 grep keyWord log_file | wc -l 匹配关键字的的行数有多少