我们从Jboss AS 7.1.1转移到了wildfly 8.2.0 Final。升级后,我们在运行60次用户负载测试时看到完全频繁的垃圾回收。完整的gc无法恢复任何内存。在分析中,我们发现org.apache.jasper.runtime.BodyContentImpl具有1 gb的保留堆。我们在PerThreadTagHandlerPool.java中找到了根本原因。修补TagHandelrPool diff --git a / src / main / java / org / apache / jasper / runtime / TagHandlerPool.java b / src / main / java / org / apache / jasper / runtime / TagHandlerPool.java index eaa8560..c6c785f 100644
--- a/src/main/java/org/apache/jasper/runtime/TagHandlerPool.java
+++ b/src/main/java/org/apache/jasper/runtime/TagHandlerPool.java
@@ -53,7 +53,7 @@ public class TagHandlerPool {
result = null;
}
}
- if( result==null ) result=new PerThreadTagHandlerPool();
+ if( result==null ) result=new TagHandlerPool();
result.init(config);
return result;
这个固定的内存泄漏问题,但是我们在运行负载测试时每隔2分钟就会看到完全频繁的gc。 Full gc能够恢复内存。在分析堆转储时,发现大部分堆区域是Eclipse MAT中的余数(350 MB),io.undertow.server.session.InMemorySessionManager占用大约17 MB,而org.hibernate.internal.SessionFactoryImpl占用大约17.5MB
尝试了多个选项 1. Ourmax堆积为1536米,减少到1024米,增加到2048米和4096米。没有好处 2.将XX:NewRatio更改为3,但没有帮助。
感谢您的投入。