记一次JVM CPU使用率很高的原因

产品上出现CPU使用率超过98%,报警。top命令查看,应用进程的CPU使用率为388%。

正确的步骤应该是,通过 “top -Hp #PID” 查看具体哪些线程占用率CPU。找到对应的PID,然后转换成16进制,再再jstack线程堆栈中查找对应线程。

使用jstack查看线程堆栈,找到所有RUNNABLE线程。这个提供的信息比较少。

通过jmap 做堆转储。使用jvisualvm分析dump文件。查看线程堆栈,找到RUNNABLE线程,发现有11个正常处理的请求。奇怪得是,这些正常的请求几乎都执行到同一个地方。
在这里插入图片描述
点开 char[]18688 发现里面有特殊字符,是个emoji,?,请求的URL编码为%F0%9F%8D%84。查看其他10个正常的请求,发现是同样的特殊字符。

使用同样的特殊字符,在本地重现该问题。然后一步一步跟踪,找到是哪里进入了死循环。

问题找到了,这个emoji导致JDBC驱动进入了死循环。我们使用的JDBC驱动为 inet merlia 7.0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值