MAT Memory Analyzer Tool,一款用于分析内存的工具,可以独自安装使用,无需安装 Eclipse
MAT安装
1.下载MAT软件
下载 Mac OSX版本
2.安装 版本11以上的JDK
下载了 MAT就可以进行安装了吗?
No,No,No...我们还需要安装 JDK,需要JDK11以上的版本,因为我们下载的MAT运行需要 JDK11以上的版本,这里我安装的是JDK12
下载之后,直接进行安装即可
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 打开即可