加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux--关于JVM CPU资源占用过高的问题排查

发布时间:2020-12-14 01:59:47 所属栏目:Linux 来源:网络整理
导读:一、背景: ???? 先执行一个 java 程序里面开了两个线程分别都在 while 循环做打印操作。 ? ?? #?java?-cp?./test-threads.jar?com.spiro.Main 二、现象: ???? 通过 top 命令查看当前 CPU 情况 可以看到有个 java 进程占用 CPU 过高,下面来排查是什么线程

一、背景:

????先执行一个java程序里面开了两个线程分别都在while循环做打印操作。? ??

#?java?-cp?./test-threads.jar?com.spiro.Main

二、现象:

????通过top命令查看当前CPU情况

可以看到有个java进程占用CPU过高,下面来排查是什么线程的什么代码导致CPU过高。

?

三、步骤

????先获得PID2023,上图可以看到,或者通过jps命令获取。 执行以下命令: ??

?

#?top?-H?-p2023

说明: -H 指显示线程,-p 是指定进程

?结果:

?可以看到两个CPU占用较高的线程,记下PID 20332034 ?此处的PID即为线程ID标识) ,将其从十进制转成十六进制表示,可通过windows自带的计算器来转。得到结果分别为7f17f2

?再通过jstack命令获取当前线程栈,可暂时保存到一个文件tempfile.txt中; ?

?#?jstack?-l?2023?>?tempfile.txt

tempfile.txt中查找nid=0x7f1的线程:?

可以看到我们找到的线程Thread-0,以及该线程的状态和正在执行的代码行,本例中显示当前正在执行Worker类的15行。然后可去代码中查看不合理的逻辑

?

?

四、总结

????该方法很有用,多次使用该方法定位出程序中的性能问题,在此分享和记录。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读