记一次应用服务器cpu 99%的排查经历(完整排查过程)

问题背景:12月20日收到某应用服务器cpu使用率报警(99%),于是开始排查原因。

操作步骤如下:

1.首先 使用top命令查找出占用cpu占用率比较高的进程

2.使用  top -Hp pid 命令找出此进程下线程占用cpu情况

注:很平均,并没有发现占用率很高的线程。

3.使用 jstack -F 319843 命令查看线程的堆栈信息

 发现好多blocked线程

4.使用命令 jstat -gcutil 319843 查询jvm各个内存区域情况和gc情况

由上图看出eden区100%,survivor区0%,年老代 99.99%, 说明有大对象,导致fullgc频繁,并且回收不掉。导致cpu 99%

5.使用命令jmap -histo 319843 查看类对象占用堆内存信息

找到大对象信息

6.虽然已经定位到出问题的业务,但是为什么会产生大对象呢?

根据日志查询这个业务点,发现由于入参为0,导致查询数据库没有带这个条件,将1000w的数据全部放入内存中

问题解决终于解决了,1分钟改代码,上线解决

总结:个人感觉导致cpu使用率飙高的原因无非2中(如有错误或者遗漏请指正)

1.出现了耗cpu的操作,例如excel的导入和导出,这种情况 找到对应线程即可解决问题

2.各个线程占用cpu比较均衡,这个时候就要考虑是不是频繁gc导致cpu飙高

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值