如何排查Java应用占用CPU较高导致系统响应慢的问题
这篇文章主要讲解了"如何排查Java应用占用CPU较高导致系统响应慢的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何排查Java应用占用CPU较高导致系统响应慢的问题"吧!
1、问题现象
某项目组反馈:应用生产环境出现请求响应实际较长,经常出现客户端请求超时的现象,系统几乎不可用。
2、问题排查过程
2.1、查看各服务器资源使用情况
在数据库服务器、应用服务器中执行top命令,发现应用服务器java进程占用CPU较高。正常情况下,在没有流量的情况下,应用服务器CPU使用率应该在1%以内,但当时查看CPU利用率大概在20%到30%左右。(这是事后补的图)
记录占用CPU较高的进程号(pid)。
2.2、查看占用CPU较高的线程号
执行top -H -p
执行命令printf "%x\n"
2.3、将进程中的线程信息转储到文件中
执行jstack -l
java.util.concurrent.LinkedBlockingQueue.remove()方法
通过百度(google),是一个JDK1.8低级版本的Bug。升级生成环境JDK到1.8_238后,问题解决。
2.3、查看内存中占用空间前20位的对象
执行命令jmap -histo(这里pid时top命令获得的占用CPU较高的进程号) | head -n 20
2.4、生成dump文件
执行命令jmap -dump:file=/tmp/javaDump.hprof,format=b(这里pid时top命令定位的占用CPU较高的进程号)
感谢各位的阅读,以上就是"如何排查Java应用占用CPU较高导致系统响应慢的问题"的内容了,经过本文的学习后,相信大家对如何排查Java应用占用CPU较高导致系统响应慢的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!