码迷,mamicode.com
首页 > 其他好文 > 详细

堆内存富余却疯狂FullGc问题排查

时间:2015-05-29 18:12:47      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

    刚上线了一个新的应用集群,第二天和第三天收到了应用FullGc超过阈值的报警短信。但是观察报警Java实例的jvm监控,堆内存仅仅用了1G多一点,还富余近700M。很困惑,剩余这么多内存没被使用,那么说明老年代内存是充足的才对啊!

    针对报警的实例进程执行jstat -gcutil 命令,拿到了这个java进程的内存个个代的使用百分比。

    发现P的使用率是98%,P,即 Permanent Generation,永久代。也就是说永久代的使用率已经超过了98%。于是问题明了了。FullGc,大家很容易想到的是Old Generation内存爆了导致的!但是这不是唯一的条件,永久代内存回收也是归FullGc管的!于是强烈建议我们的监控界面添加永久代的监控。

    再针对这个实例执行  jstat -gccapacity pid 命令,发现这个实例的永久代仅仅给了82M。82M意味着什么,永久代的默认堆内存大小。

    果断添加JVM的永久代参数,-XX:PermSize=512M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/im.**.com/ 。顺便加上对内存OOM的自动dump参数。

堆内存富余却疯狂FullGc问题排查

标签:

原文地址:http://blog.csdn.net/bruce128/article/details/46237513

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!