cpu占用过高问题的排查及解决(cpu资源占用过高怎么解决)

专注于Java领域优质技术号,欢迎关注作者:auzll一、背景:先执行一个java程序里面开了两个线程分别都在while循环做打印操作。#java-cp./test-threads.

专注于 Java 领域优质技术号,欢迎关注

作者:auzll

一、背景:

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

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

二、现象:

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

cpu占用过高问题的排查及解决(cpu资源占用过高怎么解决)

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

三、步骤

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

# top -H -p2023

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

结果:

cpu占用过高问题的排查及解决(cpu资源占用过高怎么解决)

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

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

# jstack -l 2023 > tempfile.txt

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

cpu占用过高问题的排查及解决(cpu资源占用过高怎么解决)

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

cpu占用过高问题的排查及解决(cpu资源占用过高怎么解决)

四、总结

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


本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
投稿

网络电视怎么重新设置密码(网络电视忘记设置密码怎么办)

2023-6-21 13:50:50

投稿

如何在word文档中插入一页横页(如何在word中插入横页面)

2023-6-21 13:51:24

搜索