博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于JVM CPU资源占用过高的问题排查
阅读量:6455 次
发布时间:2019-06-23

本文共 612 字,大约阅读时间需要 2 分钟。

hot3.png

一、背景:

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

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

二、现象:

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

    213205_mZe1_143181.png

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

三、步骤

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

# top -H -p2023

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

    结果:

    214711_kItr_143181.png

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

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

# jstack -l 2023 > tempfile.txt

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

215624_IYrc_143181.png

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

221032_TEA0_143181.png

四、总结

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

    

转载于:https://my.oschina.net/shipley/blog/520062

你可能感兴趣的文章
求最大值及其下标
查看>>
Request header is too large
查看>>
轮播插件swiper.js?
查看>>
网路流24题总结
查看>>
15 个 Android 通用流行框架大全
查看>>
ant 执行java文件,java文件中含中文,显示乱码
查看>>
IE8兼容@media和mp4视频的解决方案
查看>>
第二周总结
查看>>
概率图模型建模、学习、推理资料总结
查看>>
【转】知道这20个正则表达式,能让你少写1,000行代码
查看>>
自定义 启动和关闭 oracle 的命令
查看>>
SQLite数据库、ListView控件的使用
查看>>
Quartz
查看>>
正则表达式介绍
查看>>
初识Scala反射
查看>>
第三十九天
查看>>
Redis详解
查看>>
论程序员加班的害处
查看>>
codeblocks快捷键
查看>>
基于HTML5的WebGL设计汉诺塔3D游戏
查看>>