JVM内存分析,除了堆内存还有哪些?

问题场景:某个应用服务器(2C4G),xms xmx配置3G,内存占用远远超过3G,硬件服务器报警内存占用经常超过95%,(内存一直占用,可能导致java应用 crash),由于处于双十一敏感时期,所以需要追根究底。(后xmx改为2G,后面图均是2G的配置)

怀疑点1:是否有内存泄漏?

1.观察JVM回收详情,无异常(类似于jvisualvm)

2.利用jmap下载堆内存文件,使用MAT、jprofile分析,并未发现异常对象

故内存占用跟堆内存无关,排除内存泄漏,

总结:常用内存分析工具,jvisualvm jconsole,eclipse mat,jprofile.常使用命令jmap jstack jstat

怀疑点2:是否堆外内存泄漏,因为使用到netty,可能有操作堆外内存,未释放

-XX:NativeMemoryTracking=[off | summary | detail]  添加系统启动参数(此配置会影响线上性能10%-15%,谨慎使用,只设置一台机器)

jcmd命令具体自己搜一下。

本次使用的到的  jcmd 56289 VM.native_memory  …… baseline   summary.diff来追踪内存变化,如下图

终于看到了内存的分布,

其中reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小
Java Heap部分表示heap内存目前占用了2048M 同xmx配置;

Class部分表示已经加载的classes个数为15392,占用了163MB;

Thread部分表示目前有532个线程,占用了534MB  xss设置1M;

Code部分表示JIT生成的或者缓存的占用了117MB;

GC部分表示目前已经占用了136MB的内存空间用于帮助GC;

compiler部分表示compiler生成code的时候占用了2MB;

Internal部分表示命令行解析、JVMTI等占用了131MB;

Symbol部分表示诸如string table及constant pool等symbol占用了20MB;

Native Memory Tracking部分表示该功能自身占用了34MB;

至此,内存占用均已分析完毕,后续优化点,

1.thread数量,xss大小(GC回收线程数量)

2.JIT部分jvm设置(后续研究一下)

还有一些内存pmap等命令的查看内存的分配情况,内存存储内容等,有兴趣可以了解一下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值