概述
专注于Java领域优质技术号,欢迎关注
作者:auzll
一、背景:
先执行一个java程序里面开了两个线程分别都在while循环做打印操作。
# java -cp ./test-threads.jar com.spiro.Main
二、现象:
通过top命令查看当前CPU情况
![07701bc2a868dbd3cf4e32d079042507.png](https://file2.kaopuke.com:8081/files_image/20230513/07701bc2a868dbd3cf4e32d079042507.png)
可以看到有个java进程占用CPU过高,下面来排查是什么线程的什么代码导致CPU过高。
三、步骤
先获得PID为2023,上图可以看到,或者通过jps命令获取。 执行以下命令:
# top -H -p2023
说明: -H 指显示线程,-p 是指定进程
结果:
![42f0c7e29d164187b13b73bd51c9b4a5.png](https://file2.kaopuke.com:8081/files_image/20230513/42f0c7e29d164187b13b73bd51c9b4a5.png)
可以看到两个CPU占用较高的线程,记下PID 2033和2034 ( 此处的PID即为线程ID标识) ,将其从十进制转成十六进制表示,可通过windows自带的计算器来转。得到结果分别为7f1和7f2
再通过jstack命令获取当前线程栈,可暂时保存到一个文件tempfile.txt中;
# jstack -l 2023 > tempfile.txt
在tempfile.txt中查找nid=0x7f1的线程:
![4a5e72eb49158cba340b930000577f19.png](https://file2.kaopuke.com:8081/files_image/20230513/4a5e72eb49158cba340b930000577f19.png)
可以看到我们找到的线程Thread-0,以及该线程的状态和正在执行的代码行,本例中显示当前正在执行Worker类的15行。然后可去代码中查看不合理的逻辑
![b8a4637505a663191aa0627e3651135f.png](https://file2.kaopuke.com:8081/files_image/20230513/b8a4637505a663191aa0627e3651135f.png)
四、总结
该方法很有用,多次使用该方法定位出程序中的性能问题,在此分享和记录。
最后
以上就是苹果唇膏为你收集整理的ffmpeg占用cpu过高_学会这个排查CPU资源占用过高问题技巧,关键时刻能救你一命...一、背景:二、现象:三、步骤四、总结的全部内容,希望文章能够帮你解决ffmpeg占用cpu过高_学会这个排查CPU资源占用过高问题技巧,关键时刻能救你一命...一、背景:二、现象:三、步骤四、总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复