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、服务器配置低等等,具体问题要具体分析。

参考:https://cloud.tencent.com/developer/article/2478183;

https://blog.csdn.net/Teminator_/article/details/140999346;

https://www.cnblogs.com/cherishthepresent/p/17474952.html