碧彩商城项目实战案例参考
问题描述:Linux服务器CPU突然飙升到100%,这时候系统直接卡死,很多新手面对这种情况经常束手无策,本文就针对这个问题提出个人方案,希望能帮助到你们。 |
1 top查看cpu较高的进程
1.登陆Linux服务器,用 top命令查看占用CPU最高的进程,如下图所示:
2 top -H -p pid找出线程
然后在用下面的命令找出线程
-H表示以线程的维度展示,默认以进程维度展示。
例如:top -H -p 5031
3 转为十六进制
一共1个占用cpu的线程id 7556 ,需要将线程id从十进制转为十六进制,因为java线程栈文件中的线程id是十六进制。十进制 转十六进制的命令是:
echo "obase=16;number" | bc
obase(output base)是输出的进制,
number是输入值,默认十进制,
bc(An arbitrary precision calculator language)是任意进制转换语言。
命令例如:echo "obase=16;5273" | bc
4 jstack 线程栈导出
将java进程的线程栈导出
例如:jstack 5031 > ./thread5273Dump.log
找相关字眼:locked、RUNNABLE
问题分析:通过上图可以分析出,for循环导致的,杀掉进程 kill -9 pid(pid指的是进程id,通过上面top命令可以查看),然后优化代码重新发版;建议再看看有没有其他进程cpu也很高的情况,如果还有需要再次排查,尽量全面找出更多问题。
5 总结
(1)top ---->CPU100%---> 5031
(2)top -H -p 5031 --->5273
(3)echo "obase=16;5273" | bc --->1499
(4)jstack 5031 > ./thread5273Dump.log
温馨提示:每个服务器和系统导致的cpu飙升100%情况都可能不一样,大家要懂得举一反三,上面只是一种比较常见情况,比如还有慢sql、服务器配置低等等,具体问题要具体分析。