请帮助我了解Wildfly 10应用程序中循环System.gc()
调用的必要性。
问题描述
我的应用程序在一小时内变得越来越慢。正如您在图片中看到的那样,垃圾收集后的响应时间从1000ms到大约200ms立即得到改善。然后响应时间再次上升,直到下一个GC到来。
类似的行为显示了CPU的使用情况。
知道什么?
我知道垃圾收集是由sun.misc.GC
类触发的。堆转储还包含类以及用于执行循环System.gc()
调用的Damon线程。
分析表明远程服务非常快。这意味着连接建立时间过长会导致响应时间过长。 显然,由于旧的"死亡"连接持续时间越来越长。远程对象。
我不明白的是什么?
我知道GC.java类会触发完整垃圾回收来删除不需要的远程对象。但是,我不明白为什么需要以这种方式删除这些远程对象。 (是因为这些物体经常存在于次要GC中吗?)
据我所知,客户端告诉服务器不再使用远程对象 - (DGC)Distributed Garbage Collection。 由于DGC,服务器知道不再使用远程对象。
所以我的问题是......
更新
与jboss 4客户端的通信会导致GC周期。 JVP启动参数是:
-Xms4g
-Xmx8g
-XX:+UseCompressedOops
-Djava.net.preferIPv4Stack=true
-Dorg.jboss.resolver.warning=true