假如生产环境cpu占用过高,谈谈你的分析思路和定位?
步骤:
我们提前部署了一个死循环的javaDemo程序,跑在linux上。
1. 先用top命令找出占用cpu最高的进程号
可以发现进程号是5101的java进程:
2. ps -ef或者jps进一步定位
得知是怎样一个后台程序给我们惹事。可以发现是我们正在运行的java demo程序:
- jps -l 列出所有进程:
- ps -ef|grep java|grep -v grep
3 .定位到具体的线程或者代码!!!!!
使用如下命令:
ps -mp 5101 -o THREAD,tid,time
参数解释:
- -m :显示所有线程
- -p pid :进程使用的cpu时间
- -o :该参数后使用户自定义格式
可发现,线程号5102的线程,cpu占用最高,达到35.6%,有问题。
4.将需要的线程id转换为16进制格式(小写)
将线程号 5102,转换为16进制数字 :13ee;
5.jstack 进程id | grep tid(16进制线程id,小写英文) -A60
jstack 5101 | grep 13ee -A60
参数说明
- -A60 打印前60行
可以发现,是第10行代码有问题。
到此就找到了出问题的代码。