java内存泄漏

一、图形化工具:jconsole

JDK自带,在windows平台下,执行cmd进入控制台,然后执行jconsole即可。

这个工具能够直观的观察内存的增长和回收情况,CPU的使用情况等等。

jconsole远程链接的一个实例,例如我想观察远端服务器上tomcat的运行情况。

1 vim catalina.sh
2 
3 CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.8.100 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxrem  
4 ote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 

然后就可以在远程访问栏输入192.168.8.100:12345查看运行情况了。

上面配置的两个false是不用输入用户名和密码的。

作为产品发布时别忘记把这个注释掉!

二、jstat

jstat -gcutil 6728 2500 10

观察内存的回收情况,每隔2.5秒打印一次结果,一共打印10次,能看到类似下面的这个结果:

S0 — Heap上的 Survivor space 0 区已使用空间的百分比

S1 — Heap上的 Survivor space 1 区已使用空间的百分比

E — Heap上的 Eden space 区已使用空间的百分比

O — Heap上的 Old space 区已使用空间的百分比

P — Perm space 区已使用空间的百分比

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

如果有大量的FGC就要查询是否有内存泄漏的问题了!

三、如果想查看具体每一个类的内存分配情况怎么办呢?

一个强大的命令出场了:

jmap

查看每一个类的内存分配和占用情况:

jmap -heap 6728|jmap -histo:live 6728

原文地址:https://www.cnblogs.com/yoyotl/p/5429978.html