完整GC无法完全恢复内存

时间:2015-05-04 15:12:46

标签: java memory jboss garbage-collection jvm

这是Jboss AS 7 / EAP 6的jvm设置

java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode)


VM Arguments: -XX:+UseCompressedOops -Dprogram.name=standalone.bat 
-XX:-TieredCompilation -XX:+PrintGCDetails -Xloggc:E:\serverLog\jvm.log
-Xms1303M -Xmx1303M -XX:MaxPermSize=256M 
-Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 
-Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true 
-Djboss.modules.system.pkgs=org.jboss.byteman 
-Djboss.server.default.config=standalone.xml -Dorg.jboss.boot.log.file=E:\JAVA
\JBOSS\EAP-6.0.0.GA\jboss-eap-6.0\standalone\log\boot.log 
-Dlogging.configuration=file:E:\JAVA\JBOSS\EAP-6.0.0.GA\jboss-eap-6.0
\standalone/configuration/logging.properties 

我每30秒刷新一次重载页面,然后我发现在gc log中,逐渐发生了完全垃圾收集,每个完整的GC发布部分老一代但它越来越小,最后只是开销,here是jvm日志

我想知道这是否表示内存泄漏或jvm调整问题以及如何让每次gc恢复大部分内存?

更新

感谢大家的指导,在检索堆转储并使用Eclipse MAT进行分析后,它看起来所有泄漏来自 org.jboss.as.web.deployment.WebInjectionContainer

这里是结果的截图

800 + m内存泄漏

enter image description here

enter image description here

更新2

我不知道它是否是同一个问题,但我尝试从另一个thread应用相同的更改,我可以看到应用程序使用更少的内存,但泄漏仍然存在。完整的GC只能恢复少量的终身生成因此(年轻时生成泄漏)所以经过几个完整的gc服务器得到了它的开销......

0 个答案:

没有答案