这篇文章主要介绍因Java应用造成CPU过高怎么排查,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
使用top命令查询服务cpu使用情况
服务器资源使用率
可以看到31737这个进程的CPU使用率巨大
使用top -Hp 31737查询31737进程中各个线程的资源使用率
top -Hp 31737
使用top -Hp 31737查询31737进程中各个线程的资源使用率
31737进程中各个线程的使用率
由于当时的截图丢失了,简单说一下,使用top -Hp 31737命令查询到31737进程中,一个线程id为5322占用CPU过高
使用printf "%x\n" 5322把线程id转化为十六进制
printf "%x\n" 5322
因为打印线程栈的时候,本地线程标识nid是用十六进制表示的,使用该命令把线程id转化为十六进制
5322的十六进制为14ca
使用jstack命令打印堆栈信息
jstack 31737 | grep -10 14ca
使用jstack 31737 | grep -10 14ca打印31737的堆栈信息,并查找本地线程标识为14ca的线程堆栈信息
31737的堆栈信息
如图,线程的状态为TIMED_WAITING,对象等待中,查看源码
出现问题的代码
发现问题的原因就不做详细分析了,这里主要是分享一下问题排查的过程
度娘一下有个大神回答的不错,连接在这里,有兴趣的可以自己去看一下https://stackoverflow.com/questions/6981564/why-must-the-jdbc-driver-be-put-in-tomcat-home-lib-folder/7198049#7198049
以上是“因Java应用造成CPU过高怎么排查”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。