千家信息网

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

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要讲解了"如何排查Java应用占用CPU较高导致系统响应慢的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何排查Java应用占用CPU
千家信息网最后更新 2024年11月23日如何排查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 ,查看占总CPU较高的线程。

执行命令printf "%x\n" (这里pid时top -H -p 获得的线程号,例如上图中的5800、5772等),将十进制线程号转换为16进制。

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

执行jstack -l > 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时top命令获得的占用CPU较高的进程号) | head -n 20

2.4、生成dump文件

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

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

0