这篇文章主要介绍因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过高怎么排查”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!