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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了