Java服务导致CPU爆表异常排查

一、前言

之前的博客有提到过面对Tomcat部署的java服务出现内存溢出该如何定位,今天来记录下Tomcat部署的java服务出现CPU爆表的事故该如何定位。

二、正文

针对Linux系统在处理CPU爆满时会有相关指令可以一步到位,相关资料度娘有很多。本文重点以Windows系统记录排查过程。

1、通过系统自带的资源管理器找到java服务,查看PID

2、通过指令导出该进程快照

jstack -l 11240 > c:/11240.stack

由于生成的stack文件只会记录进程相关信息,如果我们需要定位线程占用率则需要小工具

3、下载线程CPU分析工具

下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

解压后打开工具,找到Java服务,右键properties在弹出框中选中Threads列表

此时就是Java服务中各个线程占用CPU的情况,我们按照CPU响应时间排序,就可以找到最耗时的某个线程。复制它的TID。

4、将第三部复制的TID转换为十六进制

例如我们找到了TID为:9928,通过计算器得知十六进制为26C8

5、然后我们用文本格式打开第一步导出的STACK文件,在里面查找TID为26C8的相关信息,此时我们可以定位到是在该行代码执行过程中疯狂占用CPU。

6、然后我们通过查看代码,定位具体原因进行修改

上图没有形成逻辑闭环导致成为死循环,疯狂消耗CPU致使爆表。

三、总结

关于Windows系统的Tomcat下CPU爆表排查就介绍完了,过程相对还是比较简单,按照步骤执行一次就可以学会的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aikes902

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值