内存溢出+CPU占用过高排查解决方案

前言

这段时间以来都没有写过文章了,以为要换工作的原因,所以一直在为面试做准备,面试了几家收到了4个offer,连我也不知道什么时候这么抢手了,后来选择了一家做医疗的大公司工作,废话不多说,今天开始陆续写文章。

这里不说其他的,只说内存的溢出以及怎么排查,这也是面试会被面试官问到的问题。以下的方式适合初学者。

定位问题

top命令查看最耗CPU的进程

这里输入top 命令之后键入大写的 P ,进程按照 CPU 从高到底排序。

在这里插入图片描述
查看最消耗 CPU 的线程,比如一下这个进程:
在这里插入图片描述

1612 为进程号,键入大写 P,该进程中的线程按照 CPU 从高到底排序
top -Hp 1612
在这里插入图片描述

将上面线程号 31467 转为 16 进制,如下:

将线程号转为 16 进制;其中 31467 为线程号
printf ‘%x\n’ 31467
29962 为进程号,0x7aeb 为最耗 CPU 线程的十六进制
jstack 29962 | grep ‘0x7aeb’ -C10 --color

在这里插入图片描述
下面我们用 Jmap 的命令查看当前堆的使用情况,如下:

jmap -heap 31467
这里的 31467 是进程号,不要搞错了哦

在这里插入图片描述
查看 gc 回收频率

jstat -gcutil 31467 5000,这里的 37769 为进程号,5000 是指每 5 秒输出一次,如下:
在这里插入图片描述
上图中 O 代表老年代占用率,FGC 是 FullGC 次数,FGCT 是 fullGC 时间。

生成 dump 文件命令

因为我这里没有报内存溢出的问题,没有保留JVM内存文件,只说实现方式就好。这里我们导出 dump 文件进行分析找到原因。

jmap -dump:format=b,file=fileName.dump pid,fileName 是导出后 dump 名称,pid 为进程号

在这里插入图片描述

把 dump 文件导出到本地以后用 Eclipse Memary Analysis 进行分析,可以到官问下载:MAT下载地址

下载完以后安装打开,如下步骤导入即可,关于查看方式可以网上了解一下,很容易就懂。在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值