Java堆内存富余却疯狂FullGc问题排查
来源:互联网 发布:淘宝注册地址怎么修改 编辑:程序博客网 时间:2024/06/06 03:52
刚上线了一个新的应用集群,第二天和第三天收到了应用FullGc超过阈值的报警短信。但是观察报警Java实例的jvm监控,堆内存仅仅用了1G多一点,还富余近700M。很困惑,剩余这么多内存没被使用,那么说明老年代内存是充足的才对啊!
同事提醒我是不是申请了什么大对象,诚然,老年代只会有两种类型的对象,1,多次Minor Gc中存活的小对象,2,大对象,即超过了PretenureSizeThreshold这个阀值直接分配到老年代的对象。一般疯狂Full Gc的原因就是程序申请大对象导致的。这回还是跟大对象有关吗?
针对报警的实例进程执行jstat -gcutil 命令,拿到了这个java进程的内存个个代的使用百分比。
发现P的使用率是98%,P,即 Permanent Generation,永久代。也就是说永久代的使用率已经超过了98%。于是问题明了了。FullGc,大家很容易想到的是Old Generation内存爆了导致的!但是这不是唯一的条件,永久代内存回收也是归FullGc管的!于是强烈建议我们的监控界面添加永久代的监控。永久代能回收什么呢?一,废弃的字符串常量,二,不再被引用的class对象。
再针对这个实例执行 jstat -gccapacity pid 命令,发现这个实例的永久代仅仅给了82M。82M意味着什么,永久代的默认堆内存大小。
果断添加JVM的永久代参数,-XX:PermSize=512M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/im.**.com/ 。顺便加上堆内存OOM的自动dump参数。
jstat工具类:
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
- Java堆内存富余却疯狂FullGc问题排查
- Java堆内存富余却疯狂FullGc问题排查
- java应用fullgc时如何排查问题
- 一次JVM中FullGC问题排查过程
- java内存泄漏问题排查
- java内存溢出问题排查
- 一次线上fullgc排查
- druid高内存占用,高fullgc问题
- 如何排查java内存溢出问题
- 线上FullGC频繁的排查
- 文件存储服务fullgc排查
- 转 内存问题排查
- 工作中遇到的java 内存溢出,问题排查
- 【实践】内存问题排查实践
- 一次JS内存问题排查
- Android内存泄漏问题排查
- java 性能问题 排查
- java OOM问题排查
- cvExtractSURF运行cv::Exception解决探究
- html中div块返回(做为插件处理,模块)
- modelgoon插件,该插件支持在eclipse直接根据java文件生产类图
- 4
- 从设计到开发,10大不容错过的效率提升工具
- Java堆内存富余却疯狂FullGc问题排查
- 5
- Java学习之旅基础知识篇:数组及引用类型内存分配
- maven学习日志之三 Maven的生命周期
- 7.1简单线性回归--python机器学习
- 如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Handle Missing aclocal-1.15 Error When Install sshpass
- 6
- 虚拟存储器