arthas 进行内存溢出分析

本贴最后更新于 1500 天前,其中的信息可能已经时移俗易

有做过测试的同学,应该或多或少都见过OOM的错误吧

arthas20201112143918.png

这种错误日志见过吗?相信很多人,都很熟悉,老朋友了。

但是,这种问题,我们怎么才能准确定位到问题根源呢?

很多测试朋友可能就望而却步了,说这是开发人员的事情,让开发人员去排查好了。你如果是初、中级测试工程师,你可以这样说,但是,如果你是高级测试工程师,你是性能测试工程师,哪,恐怕就是你不负责任了。

当你深入学习了之后,你可能发现jvm自带的jmap可以查看这种内存溢出问题,但是,当你真正去用的时候,你又会发现,你想用一个jmap来抓取内存溢出的包,估计你得等到海枯石烂,天荒地老,时间非常长,而一旦中间中断,你这次抓包就失败了。

今天给大家介绍一个神器——arthas,它是阿里开源的一款jvm分析工具。

现在我有个项目,就有内存溢出问题

首先,启动项目,再启动arthas,查看到这个项目堆使用率约26%

arthasoom1.gif

接下来,我们用jmeter调用这个项目的接口,进行性能测试,发现马上就出现了“Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space” 错误。

这时候,我们从arthas中,可以看到该项目的堆使用率瞬速达到83%以上

arthasoom2.gif

出现这样,肯定就是出现了OOM问题了,此时,我们只需要按一下'q'键, 然后输入’heapdump‘ 回车

就会看到正在生成一个hprof文件,稍等1分钟左右,就生成结束,就可以去tomcat的temp路径下查找这个文件

arthas20201112154628.png

把文件下载下来,然后用MAT工具打开

arthasoom3.gif

这里就详细的看到了具体的类,你可以把这个hprof文件给开发,或者把这个定位到具体类的截图给开发,接下来,就真正式开发忙活的时候了。

是不是 忒简单了,你掌握了吗?

回帖
请输入回帖内容 ...