我们的生产服务器出现 OOM,因为 permgen 已满。使用jmap -permstat
检查 permgen 区域,我们发现有很多由com.sun.xml.ws.client.WSSServiceDelegatingLoader
. 加载的类是com.sun.proxy.$ProxyXXX
,其中XXX
是一个 int 序列。
最终,JVM OOM,full gc 无法回收任何 permgen 内存。奇怪的是,如果我在 VisualVM 中单击 System GC,则会卸载类并且 permgen 的使用会下降。
我们的 JDK 版本是 1.7.0.80,我们添加了CMSClassUnloadingEnabled
.
-XX:+ExplicitGCInvokesConcurrent
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=60
-XX:+UseParNewGC
-XX:+CMSParalledlRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSFullGCsBeforeCompaction=0
-XX:+CMSCLassUnloadingEnabled
-XX:MaxTenuringThreshold=18
-XX:+UseCMSInitialtingOccupancyOnly
-XX:SurvivorRatio=4
-XX:ParallecGCThreads=16
我们的代码已经运行了很长时间。最近的操作是一个 WebLogic 补丁。这真的让我很困惑。有人可以帮我解决这个问题,非常感谢!