线上问题排查
- 首先需要理解服务器各项指标含义和边界值
服务器指标(待整理)
查看服务CPU和内存固定大小
cat /proc/cpuinfocat /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转换成十六进制5acjstack 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