Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jboss wildfly 8.2.0 Final中的全频垃圾收集_Jboss_Garbage Collection_Wildfly_Wildfly 8 - Fatal编程技术网

Jboss wildfly 8.2.0 Final中的全频垃圾收集

Jboss wildfly 8.2.0 Final中的全频垃圾收集,jboss,garbage-collection,wildfly,wildfly-8,Jboss,Garbage Collection,Wildfly,Wildfly 8,我们从JBossAS 7.1.1升级到wildfly 8.2.0最终版。升级后,在运行60用户负载测试时,我们看到了完全频繁的垃圾收集。完全gc无法恢复任何内存。通过分析,我们发现org.apache.jasper.runtime.BodyContentImpl有1GB的保留堆。我们在PerThreadTagHandlerPool.java中找到了根本原因。打补丁的标记池 diff——git a/src/main/java/org/apache/jasper/runtime/TagHandler

我们从JBossAS 7.1.1升级到wildfly 8.2.0最终版。升级后,在运行60用户负载测试时,我们看到了完全频繁的垃圾收集。完全gc无法恢复任何内存。通过分析,我们发现org.apache.jasper.runtime.BodyContentImpl有1GB的保留堆。我们在PerThreadTagHandlerPool.java中找到了根本原因。打补丁的标记池 diff——git a/src/main/java/org/apache/jasper/runtime/TagHandlerPool.java b/src/main/java/org/apache/jasper/runtime/TagHandlerPool.java 索引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。完全gc能够恢复内存。在分析堆转储时,发现Eclipse MAT中的大部分堆区域都是剩余的(350MB),io.undertow.server.session.InMemorySessionManager占用大约17MB,org.hibernate.internal.SessionFactoryImpl占用大约17.5MB

尝试了多种选择 1.最大堆径为1536m,减少至1024m,增加至2048m和4096m。没有好处 2.将XX:NewRatio更改为3,但没有帮助


感谢您的投入。

350M远小于1536M最大堆,不能称之为“most”。剩下的是什么?我会用gc标记及时绘制堆的使用情况,这通常非常有用。尝试估计每个事务的平均堆增加量是另一个有趣的信息。只带了活动对象,我不知道我错过了剩余的堆。也许我应该带上活的和死的东西。在那之后我会让你知道我们分手了。可能是死对象可以帮助识别对象循环。似乎剩余的900 MB是创建的抓取。Jmap强制使用完全gc,这样在分析堆转储时垃圾就消失了。Dynatrace泄漏分析显示800 MB为垃圾,这将在下一个GC循环中清除。我们不知道垃圾里面是什么,也不知道为什么会产生这么多垃圾。