现在的位置: 首页 > 综合 > 正文

jmap + Eclipse MAT :排查内存泄漏的好工具

2017年10月22日 ⁄ 综合 ⁄ 共 2210字 ⁄ 字号 评论关闭

    最近在测一个接口时,发现在并发压力的情况下,用jconsole监控JVM后,发现服务器灰常耗费内存导致GC频繁从而影响了性能,故想找到程序中具体哪块比较耗费内存。搜索一些资料后,终于找到了一个好用而界面直观的工具,能帮助我们很好的分析内存的耗费情况~

  先说明一个linux下的命令 jps 和 jmap

  jps 用于列出所有java相关线程的pid等信息,如:

[root@myjrjapp-100 ~]# jps
23178 Jps
20289 Bootstrap

其中,“20289 Bootstrap”是指系统中运行的tomcat进程号和进程名。

 

     jmap是一个可以输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本。jmap-dump:format=b,file=f13024可以将3024进程的内存heap输出出来到f1文件里。它可以打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)

如:jmap pid    打印内存使用的摘要信息

 

分析方法1:

    以上两个命令可以结合起来用,例如:

[root@myjrjapp-100 ~]# jps
23178 Jps
20289 Bootstrap

[root@myjrjapp-100 ~]# jmap 20289
Attaching to process ID 20289, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b19

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 1048576 (1.0MB)
   MaxNewSize       = 4294901760 (4095.9375MB)
   OldSize          = 4194304 (4.0MB)
   NewRatio         = 8
   SurvivorRatio    = 8
   PermSize         = 134217728 (128.0MB)
   MaxPermSize      = 268435456 (256.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 118358016 (112.875MB)
   used     = 38070328 (36.30669403076172MB)
   free     = 80287688 (76.56830596923828MB)
   32.165398919833194% used
From Space:
   capacity = 458752 (0.4375MB)
   used     = 155664 (0.1484527587890625MB)
   free     = 303088 (0.2890472412109375MB)
   33.932059151785715% used
To Space:
   capacity = 458752 (0.4375MB)
   used     = 0 (0.0MB)
   free     = 458752 (0.4375MB)
   0.0% used
PS Old Generation
   capacity = 954466304 (910.25MB)
   used     = 72784624 (69.41282653808594MB)
   free     = 881681680 (840.8371734619141MB)
   7.625688166776813% used
PS Perm Generation
   capacity = 134217728 (128.0MB)
   used     = 38192248 (36.42296600341797MB)
   free     = 96025480 (91.57703399658203MB)
   28.455442190170288% used
[root@myjrjapp-100 ~]# 

分析方法2:

使用jmap命令dump内存出来
jmap -dump:live,format=b,file=heap.bin 8023

 

 之后会在当前目录创建一个”heap.bin”文件,会有好几百M大小。可以把此文件进行压缩,然后再传到其他windows机器中进行结果分析。
[root@openAS-main ~]# gzip heap.bin

分析:
在测试机上安装一个分析工具:MemoryAnalyzer-Incubation-0.8.0.20100408-win32.win32.x86  这是Eclipse MAT,是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。

官网下载地址:http://www.eclipse.org/mat/downloads.php

分析截图:

 

详细数据信息:

 

从上面两个图中就能具体分析出是程序中的哪块耗费掉了大量的内存啦~

转载自:http://blog.csdn.net/rital/article/details/5511141

抱歉!评论已关闭.