?
内存泄漏诊断步骤:
1.查看各个代的内存使用情况? ?jmap -heap pid
2.查看jvm中对象的实例个数(找出占用内存较大的异常对象)? jmap -histo pid
3.查看jvm中线程个数,是否有没被回收的线程? jstack pid
4.通过dumap出内存数据,使用MAT进行分析
?
?
?
jmap -heap pid
查看Java 堆(heap)使用情况
?
jmap -histo pid
?查看堆内存(histogram)中的对象数量,大小
?
?
jmap -histo:live pid
这个命令执行,JVM会先触发gc,然后再统计信息。
?
jstat -gcutil pid 1000??
#每一秒钟监控打印一次pid的gc情况
jstat命令详解: https://blog.csdn.net/zhaozheng7758/article/details/8623549
?
jstack pid
查看当前jvm进程所有的线程
?
?
jmap -dump:format=b,file=/home/quote/recevier_hk/dump.dat 26333
dump某个程序的内存数据
这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,
并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用。
?
?
#调查java进程中的线程数、以及都是什么线程
1.查看线程数: ps -Lf pid | wc -l? ? 或者是top -H -p pid (查看某个进程的信息,包含线程数)
2.通过top -H -p 命令查看各个线程使用资源的情况,并找出线程id
?
?
?
MAT(linux)分析内存步骤:
1.通过jmap -dump 将运行的java进程的内存数据dump出来
2.使用MAT for linux 的工具将第一步dump出来的文件分析。
具体执行命令:?
class="java">sh ParseHeapDump.sh /home/quote/heap-Analyzer/sdata-dump.dump org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
?
3.通过第二步分析会产生几个html的页面结果
?
案例:https://www.cnblogs.com/liangzs/p/8489321.html
MAT下载:http://www.eclipse.org/mat/downloads.php
?
?
Shallow heap & Retained heap:? http://bjyzxxds.iteye.com/blog/1532937
?
?
?
?