内存泄漏检测

 

1、粗略查看内存情况

分析具体的对象数目和占用内存大小

jmap -histo:live 1

2、导出、分析dump文件

jmap -dump:live,format=b,file=dump.dat 1                                                                 

  • 用 jhat分析(不推荐)

简介:jhat 是Java堆分析工具(Java heap Analyzes Tool)。JDK自带工具。 命令与jmap搭配使用, 来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器, 生成堆转储快照的分析结果后, 可以在浏览器中查看

使用方式:jhat -J-Xmx512M dump.dat,浏览器localhost:7000

总结:由于一般无法在服务器直接分析,需要复制到本地处理。分析工作是一个耗时而且极为耗费硬件资源的过程, 既然都要在其他机器上进行, 就没有必要再受命令行工具的限制了。功能太过于简陋,可以使用更强大的性能分析工具。

ps:若dump出来的堆较大,需加参数:jhat -J-Xmx512m <heap dump file>;

  • Histogram:可以列出内存中每个对象的名字、数量以及大小。 

下图会把所有的对象的名字、数量和大小全部都列出来。其中对象大小为Shallow Heap(当前对象自己所占内存的大小,不包含引用关系);

在第一行可以搜索具体某个类型。找到怀疑的类型后,执行下图操作,查出是谁在用这些对象

右键 -> List objects -> with incoming references

右键 -> Path to GC Roots -> exclude weak references

  • Dominator Tree:会将所有内存中的对象按大小进行排序,并且我们可以分析对象之间的引用结构。

图标的左下角有个红点,说明在这里可以被GC Roots访问到,不是System Class(是由我们自己创建的Thread)。能被GC Roots访问到导致不能被回收,导致它所持有的其它引用也无法被回收。


ps:若dump出来的堆较大,需把Xmx调大,若不是由于内存泄露造成不可回收,需要打开mat的Keep unreachable objects去分析不可触达的对象。

 

jvm工具简介:

1、查看进程1的线程

ps p 1 -L -o pcpu,pmem,pid,tid,time,tname,cmd                                                              

2、转换16进制

printf "%x\n" 9731

3、打印堆栈信息

jstack -l 1

可用jca分析:https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda

  1. Download jca*.jar: https://public.dhe.ibm.com/software/websphere/appserv/support/tools/jca/jca469.jar
  2. Open a terminal or command prompt and change directory to where you downloaded the JAR file.
  3. Ensure that Java is on your PATH to run the tool.
  4. Launch the tool: java -jar jca*.jar

4、内存基本情况

jmap -heap 1

5、查看进程1的内存使用情况

ps -p 1 -o vsz,rss

VSZ是指已分配的线性空间大小,这个大小通常并不等于程序实际用到的内存大小,产生这个的可能性很多,比如内存映射,共享的动态库,或者向系统申请了更多的堆,都会扩展线性空间大小,要查看一个进程有哪些内存映射,可以使用 pmap 命令来查看:

6、查看进程内存情况:

pmap -x 1

7、GC情况监控

参数:进程号 刷新时间(毫秒) 次数

jstat -gcutil 1 1000 20

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值