温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何排查Java应用占用CPU较高导致系统响应慢的问题

发布时间:2021-10-13 10:09:29 来源:亿速云 阅读:202 作者:iii 栏目:编程语言

这篇文章主要讲解了“如何排查Java应用占用CPU较高导致系统响应慢的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何排查Java应用占用CPU较高导致系统响应慢的问题”吧!

1、问题现象

某项目组反馈:应用生产环境出现请求响应实际较长,经常出现客户端请求超时的现象,系统几乎不可用。

2、问题排查过程

2.1、查看各服务器资源使用情况

在数据库服务器、应用服务器中执行top命令,发现应用服务器java进程占用CPU较高。正常情况下,在没有流量的情况下,应用服务器CPU使用率应该在1%以内,但当时查看CPU利用率大概在20%到30%左右。(这是事后补的图)
如何排查Java应用占用CPU较高导致系统响应慢的问题
记录占用CPU较高的进程号(pid)。

2.2、查看占用CPU较高的线程号

执行top -H -p <pid>,查看占总CPU较高的线程。
如何排查Java应用占用CPU较高导致系统响应慢的问题
执行命令printf "%x\n" <pid>(这里pid时top -H -p <pid>获得的线程号,例如上图中的5800、5772等),将十进制线程号转换为16进制。

2.3、将进程中的线程信息转储到文件中

执行jstack -l <pid> > threadinfo.txt(这里pid时top命令中活得的进程id)利用JDK自带的命令行jstack,将线程信息转储到文件threadinfo.txt文件中。然后在文件中,查找16进制线程号对应的执行程序为:
java.util.concurrent.LinkedBlockingQueue.remove()方法
通过百度(google),是一个JDK1.8低级版本的Bug。升级生成环境JDK到1.8_238后,问题解决。

2.3、查看内存中占用空间前20位的对象

执行命令jmap -histo <pid>(这里pid时top命令获得的占用CPU较高的进程号) | head -n 20

2.4、生成dump文件

执行命令jmap -dump:file=/tmp/javaDump.hprof,format=b <pid>(这里pid时top命令定位的占用CPU较高的进程号)

感谢各位的阅读,以上就是“如何排查Java应用占用CPU较高导致系统响应慢的问题”的内容了,经过本文的学习后,相信大家对如何排查Java应用占用CPU较高导致系统响应慢的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI