在开发过程中我们经常遇到由于代码问题导致服务器反应缓慢,服务器CPU100%的问题,跟着网上的处理步骤,自己总结一下,方便以后查找使用
1. 查询CPU占用率最高的进程
每个至少拥有一个进程,我们首先要确定异常的占用是哪个程序,哪个进程引起来。
命令
-
top -c
展示CPU占用率列表 - 输入大写
P
按占用率降序排列
image.png
可以看出来占用率最大的PID是
652
2. 查询占用率最大的线程
Java代码运行的承载体是线程,找到线程离真相更近一步
命令
-
top -Hp 652
展示进程的线程列表 - 输入大写
P
排序找出最大的
image.png
可以得知在进程
652
中,占用CPU最大的是线程940
3.找出线程在做什么
1)首先将线程PID转为16位,因为在计算机的堆栈中是16位显示的
命令
-
printf "%x\n" 940
image.png
2) 找出线程的堆栈
命令
- `jstack 652 | grep "3ac"
由于是jdk下的命令可能出现以下俩个常见的情况
A. Operation not permitted
使用
jstack
的命令的用户必须是启动线程的用户,可以在图1的user看出来,
如果使用jstack
无如何输出也切换到该用户
B.jstack: command not found
jstack
未加入环境变量,可以cd
到jdk
的bin
下或者加入环境变量
image.png