这篇文章主要讲解了“如何排查Java应用占用CPU较高导致系统响应慢的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何排查Java应用占用CPU较高导致系统响应慢的问题”吧!
某项目组反馈:应用生产环境出现请求响应实际较长,经常出现客户端请求超时的现象,系统几乎不可用。
在数据库服务器、应用服务器中执行top命令,发现应用服务器java进程占用CPU较高。正常情况下,在没有流量的情况下,应用服务器CPU使用率应该在1%以内,但当时查看CPU利用率大概在20%到30%左右。(这是事后补的图)
记录占用CPU较高的进程号(pid)。
执行top -H -p <pid>,查看占总CPU较高的线程。
执行命令printf "%x\n" <pid>(这里pid时top -H -p <pid>获得的线程号,例如上图中的5800、5772等),将十进制线程号转换为16进制。
执行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后,问题解决。
执行命令jmap -histo <pid>(这里pid时top命令获得的占用CPU较高的进程号) | head -n 20
执行命令jmap -dump:file=/tmp/javaDump.hprof,format=b <pid>(这里pid时top命令定位的占用CPU较高的进程号)
感谢各位的阅读,以上就是“如何排查Java应用占用CPU较高导致系统响应慢的问题”的内容了,经过本文的学习后,相信大家对如何排查Java应用占用CPU较高导致系统响应慢的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。