前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于JVM CPU资源占用过高的问题排查

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

作者头像
囚兔
发布2018-02-08 10:44:31
1.4K0
发布2018-02-08 10:44:31
举报
文章被收录于专栏:IT杂记

一、背景:

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

代码语言:javascript
复制
# java -cp ./test-threads.jar com.spiro.Main

二、现象:

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

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

三、步骤

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

代码语言:javascript
复制
# top -H -p2023

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

    结果:

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

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

代码语言:javascript
复制
# jstack -l 2023 > tempfile.txt

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

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

四、总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景:
  • 二、现象:
  • 三、步骤
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档