当前位置:网站首页 > R语言数据分析 > 正文

jvisualvm分析hprof cpu占用(jvm cpu资源占用高原因)



前言

最近遇到一个java应用造成了服务器CPU使用率过高,最后查询问题是因为在tomcat下重新部署应用的时候没有kill掉tomcat进程,造成应用中的数据库连接池进程中的锁不能被释放,死循环造成了cpu使用率过高的现象,详细原因就不做详细分析了,主要分享一下问题排查的过程。

使用top命令查询服务cpu使用情况

java CPU冲高的原因_java CPU冲高的原因

服务器资源使用率

可以看到31737这个进程的CPU使用率巨大

使用top -Hp 31737查询31737进程中各个线程的资源使用率

top -Hp 31737

使用top -Hp 31737查询31737进程中各个线程的资源使用率

java CPU冲高的原因_tomcat_02

31737进程中各个线程的使用率

由于当时的截图丢失了,简单说一下,使用top -Hp 31737命令查询到31737进程中,一个线程id为5322占用CPU过高

使用printf "%x " 5322把线程id转化为十六进制

printf "%x " 5322

因为打印线程栈的时候,本地线程标识nid是用十六进制表示的,使用该命令把线程id转化为十六进制

java CPU冲高的原因_十六进制_03

5322的十六进制为14ca

使用jstack命令打印堆栈信息

jstack 31737 | grep -10 14ca

使用jstack 31737 | grep -10 14ca打印31737的堆栈信息,并查找本地线程标识为14ca的线程堆栈信息

java CPU冲高的原因_tomcat_04

31737的堆栈信息

如图,线程的状态为TIMED_WAITING,对象等待中,查看源码

java CPU冲高的原因_十六进制_05

出现问题的代码

发现问题的原因就不做详细分析了,这里主要是分享一下问题排查的过程

度娘一下有个大神回答的不错,连接在这里,有兴趣的可以自己去看一下https://stackoverflow.com/questions//why-must-the-jdbc-driver-be-put-in-tomcat-home-lib-folder/#

java CPU冲高的原因_java CPU冲高的原因_06

大神的回答

大致原因就是因为在tomcat下重新部署应用的时候没有kill掉tomcat进程,造成应用中的数据库连接池进程中的锁不能被释放

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

到此这篇jvisualvm分析hprof cpu占用(jvm cpu资源占用高原因)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • redis desktop manager 连接集群(redis集群连接池配置)2025-08-20 15:09:08
  • xaviera 名字寓意(xavier英文名字寓意)2025-08-20 15:09:08
  • argparse(argparse模块有什么用)2025-08-20 15:09:08
  • detr源码(detr源码详解)2025-08-20 15:09:08
  • word里面的圈11怎么打出来(word带圈11怎么打出来)2025-08-20 15:09:08
  • store苹果商店怎么下载不了软件(苹果商店怎么下载不了apple store)2025-08-20 15:09:08
  • ifstream写文件(ifstream.read)2025-08-20 15:09:08
  • top18女rapper(top18女rapperSex)2025-08-20 15:09:08
  • store苹果商店怎么取消订单(store苹果商店取消订单多久能退款)2025-08-20 15:09:08
  • raise和rise区别(raise和rise区别读音)2025-08-20 15:09:08
  • 全屏图片