线上问题排查
- 首先需要理解服务器各项指标含义和边界值
服务器指标(待整理)
查看服务CPU和内存固定大小
cat /proc/cpuinfo
cat /proc/meminfo
系统负载 通过
uptime
命令查看 ,它表示1分钟内: 总任务数/CPU能执行的任务数
~$ uptime
20:57:07 up 1093 days, 20:39, 1 user, load average: 14.87, 15.34, 13.86
正常值应该在 (CPU核数*0.7)左右
- CPU利用率 90%
- 内存占用 80%
- TCP连接数
- 磁盘使用率
定位耗用资源严重的代码
确定容器内存大小 CPU核数,JVM参数
top
命令查看所有进程情况可以直接取出PID,或者可以通过ps -aux
查看快照 获取到 PID 和进程所在的文件路径top -Hp 1451 -d888
查看PID
为1451
下的所有线程,获取到资源占用最多的PID(线程id)-d888
代表快照888秒刷新一次 可键盘按大写 P 按照CPU使用排序, 大写 M 按照内存使用排序 获取到线程ID1452
将
1452
转换成十六进制5ac
jstack 1451 | grep 5ac -A 30
其中1451
为进程ID,1452
为线程IDgrep 5ac -A 30
代表从匹配5ac
位置开始打印往后的30行-B
代表往前,-C
代表前后各n行 正常服务器可能没有执行该命令权限,可通过下载jstack文件,在文件中搜索关键词5ac
最后得到的结果:
"main" #1 prio=5 os_prio=0 tid=0x00007ff1e0008800 nid=0x5ac waiting on condition [0x00007ff1e6697000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.github.me.Main.main(Main.java:7)
确定是 com.github.me.Main.main(Main.java:7)
这里以后,可通过阅读代码找到问题。
← shell