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

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

创新互联-专业网站定制、快速模板网站建设、高性价比临海网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式临海网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖临海地区。费用合理售后完善,十年实体公司更值得信赖。

1、问题现象

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

2、问题排查过程

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

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

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

执行top -H -p ,查看占总CPU较高的线程。
如何排查Java应用占用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较高导致系统响应慢的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:如何排查Java应用占用CPU较高导致系统响应慢的问题
文章来源:http://myzitong.com/article/pspege.html