记一次cpu100%问题排查

值班的时候发现有几台机器一直在报cpu使用率100%,下面是处理过程。

  1. 先去top命令看一下cpu的使用率,发现是java应用使用率最高。
  2. 去看下jvm的内存使用情况,因为公司有监控系统可以直接查看堆内存使用情况和gc情况(没有监控的可以使用命令查看),发现频繁的full gc,但young gc次数较少,并且每次gc的内存回收效果不好,有一大部分内存无法回收,怀疑是内存泄漏或有大对象存活。
  3. 是用jmap -dump(由于公司有直接dump的工具,但没显示具体执行的命令行 ,没有工具的可以使用:jmap -dump:file=javaDump.hprof,format=b pid)命令下载文件
  4. 将文件转移到本机并解压缩,打开mat工具将dump文件导入。
  5. 点开此功能,会显示堆内存中对象的数量和占用的内存数量。红框中分别表示对象数量,对象内存,和对象被回收后可以回收的内存(详细解释可以看这个博客:Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?_若鱼的专栏-CSDN博客
  6. 从上图可以看出除了正常的char[]对象和Object对象,SocketChannelimpl对象和下面几个netty的对象异常多,初步怀疑是netty问题。
  7. 点击下面的Dominator Tree 按钮,该视图以实例对象的维度展示当前堆内存中Retained Heap占用最大的对象,以及依赖这些对象存活的对象的树状结构。从上图可以看出第一个对象和第二个对象可能存在无法回收问题。
  8. 在代码中找到第一个对象和第二个对象,结合Historgram结果和DominatorTree结果看在哪个地方可能会存在创建socketChannel对象,并导致不能修改的问题,在大促结束后修改代码。

参考博客:使用Eclipse Memory Analyzer Tool(MAT)分析线上故障(一) - 视图&功能篇 - Trust_FreeDom - 博客园

 Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?_若鱼的专栏-CSDN博客

 

 

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值