MAC版 MAT 安装,内存分析

8,677 阅读3分钟

MAT Memory Analyzer Tool,一款用于分析内存的工具,可以独自安装使用,无需安装 Eclipse

MAT安装

1.下载MAT软件

www.eclipse.org/mat/downloa…

www.eclipse.org/downloads/d…

下载 Mac OSX版本

2.安装 版本11以上的JDK

下载了 MAT就可以进行安装了吗?

No,No,No...我们还需要安装 JDK,需要JDK11以上的版本,因为我们下载的MAT运行需要 JDK11以上的版本,这里我安装的是JDK12

www.oracle.com/java/techno…

下载之后,直接进行安装即可

3.安装 MAT

安装好了JDK之后,我们就可以安装MAT进行使用了

4.设置MAT运行内存

MAT默认运行内存为 1G,如果打开小于1G的内存快照没有问题,当打开大于1G内存的快照时,会出现问题,因此根据需要设置MAT运行时内存

位置:应用程序 --> MAT(右键) --> 显示包内容 --> Contents --> Eclipse --> MemoryAnalyzer.ini

修改内容

-Xmx4096m
-Xms4096m

5.dump java项目运行时的内存

1). 使用 jps或者 ps -ef | grep XXXX 查看运行的Java项目信息

JPS查询信息

  ~ jps
2112 KotlinCompileDaemon
2130 Launcher
1975
2010 RemoteMavenServer
2011 Launcher
2333 Jps

结果第一列是 PID信息

使用ps -ef | grep XXX 查询运行信息

[root@hushiye001 ~]# ps -ef | grep zookeeper
root     12222     1  0 May21 ?        00:59:26 /usr/local/matrix/bin/java -Dzookeeper.log.dir=/usr/local/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-root-server-hushiye001.log -Dzookeeper.root.logger=INFO,CONSOLE -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -cp /usr/local/zookeeper/bin/../zookeeper-server/target/classes:/usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/../zookeeper-server/target/lib/*.jar:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/zookeeper-prometheus-metrics-3.6.0.jar:/usr/local/zookeeper/bin/../lib/zookeeper-jute-3.6.0.jar:/usr/local/zookeeper/bin/../lib/zookeeper-3.6.0.jar:/usr/local/zookeeper/bin/../lib/snappy-java-1.1.7.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/usr/local/zookeeper/bin/../lib/simpleclient_servlet-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient_hotspot-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient_common-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient-0.6.0.jar:/usr/local/zookeeper/bin/../lib/netty-transport-native-unix-common-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-transport-native-epoll-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-transport-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-resolver-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-handler-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-common-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-codec-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/netty-buffer-4.1.45.Final.jar:/usr/local/zookeeper/bin/../lib/metrics-core-3.2.5.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.17.jar:/usr/local/zookeeper/bin/../lib/json-simple-1.1.1.jar:/usr/local/zookeeper/bin/../lib/jline-2.11.jar:/usr/local/zookeeper/bin/../lib/jetty-util-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-server-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-security-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-io-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-http-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/javax.servlet-api-3.1.0.jar:/usr/local/zookeeper/bin/../lib/jackson-databind-2.9.10.3.jar:/usr/local/zookeeper/bin/../lib/jackson-core-2.9.10.jar:/usr/local/zookeeper/bin/../lib/jackson-annotations-2.9.10.jar:/usr/local/zookeeper/bin/../lib/commons-lang-2.6.jar:/usr/local/zookeeper/bin/../lib/commons-cli-1.2.jar:/usr/local/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper/bin/../zookeeper-*.jar:/usr/local/zookeeper/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/local/zookeeper/bin/../conf:.:/usr/local/matrix/lib/dt.jar:/usr/local/matrix/lib/tools.jar -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/zookeeper/bin/../conf/zoo.cfg
root     14773 14729  0 15:44 pts/12   00:00:00 grep --color=auto zookeeper

2). 查询进程启动所属

由于使用 jmap dump内存快照时,如果当前用户与启动进程的用户不一致时,不允许进行快照的备份

使用 top -pid PID 查询进程信息

~ jps
2112 KotlinCompileDaemon
2130 Launcher
2628 Launcher
2629 MAT
1975
2650 Jps
2010 RemoteMavenServer
➜  ~ top -pid 2629

Processes: 453 total, 3 running, 450 sleeping, 2282 threads                                                                                                                                                                15:51:44
Load Avg: 1.86, 2.04, 2.02  CPU usage: 2.73% user, 1.76% sys, 95.49% idle  SharedLibs: 479M resident, 76M data, 129M linkedit. MemRegions: 149110 total, 7137M resident, 245M private, 2164M shared.
PhysMem: 19G used (2614M wired), 13G unused. VM: 4607G vsize, 2327M framework vsize, 0(0) swapins, 0(0) swapouts. Networks: packets: 247294/159M in, 232633/94M out. Disks: 493270/5606M read, 110852/1395M written.

PID   COMMAND      %CPU TIME     #TH  #WQ  #POR MEM  PURG CMPR PGRP PPID STATE    BOOSTS    %CPU_ME %CPU_OTHRS UID  FAUL COW  MSGS MSGR SYSBS SYSM CSW   PAGE IDLE POWE INSTRS CYCLES  USER    #MRE RPRV VPRV VSIZ KPRV KSHR
2629  java         0.0  00:00.24 26   1    91   19M  0B   0B   1975 1975 sleeping *0[1]     0.00000 0.00000    501  8721 340  146  50   8527+ 536  2285+ 0    743+ 0.5  212404 1294300 hushiye N/A  N/A  N/A  N/A  N/A  N/A


其中 COMMAND 信息就是启动进程的所属

3).切换用户信息 sudo java

使用命令 sudo 用户,输入密码 切换用户信息

~ sudo java
Password:

4).保存内存快照信息

jmap -dump:live,format=b,file=dump.hprof 2629

使用 MAT 加载dump文件

此时 内存快照已经生成,运行MAT软件,使用 Open a Heap Dump 打开即可