Perm区满,FullGC都GC不下来。 2C

最近发现一个问题,应用在运行过程中Perm区占用不断增加,多次FullGC之后都没有下降。查看Dump文件之后,发现系统加载了很多类似sun.reflect.GeneratedSerializationConstructorAccessor这种名字的类。尝试设置sun.reflect.inflationThreshold为整数最大值,也加了各种GC参数-XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5,问题没有得到解决。请问什么情况下会出现这样的问题,急等!
p.s.这两个C币是我全部家产了,谢谢了。

2个回答

1、perm区多大,测试多少时间堆满。增大perm区有没有效果
2、参数杂七杂八的参数都去掉试试GC情况
3、设置-Xmn,调小年轻代,增大old区试试
4、CMS的XX:CMSInitiatingOccupancyFraction阀值可以调整着试试。

speeder622
speeder622 后来终于定位出来了原因,是XStream 1.3.1版本(可能 包括之前版)的一个BUG。XStream出于性能的考虑,为每个需要需要序列化的类缓存了其Constructtor,但是使用的是WeekMap完成这个缓存工作。导致每次YGC都把缓存内容给回收了,于是就产生了几十万个GeneratedSerliazationConstructorAccessor。。。仍旧谢谢你的帮助。
5 年多之前 回复
speeder622
speeder622 回复danielinbiti: 现在推测是XStream使用的方式不对造成的,正在排查;自己也写了Demo代码,发现基本能复现这个问题,唯一不同的是每次FullGC,Perm区还是能被回收的。。。
5 年多之前 回复
danielinbiti
danielinbiti 回复speeder622: 看过dump了吗?先看看创建的类可能是哪个jar或者框架中的
5 年多之前 回复
speeder622
speeder622 回复danielinbiti: -Xms4096m -Xmx4096m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MinHeapFreeRatio=40 -XX:MaxHeapFreeRatio=70 -XX:CMSInitiatingOccupancyFraction=65 -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 这是全部的JVM参数
5 年多之前 回复
speeder622
speeder622 2.Perm区持续增长,完全停不下来,sun.reflect.GeneratedSerializationConstructorAccessor<N>这种类加载了几十万个。3.这个应该跟young区和old区的大小关系不大。4.由于是线上环境,不断调整参数尝试的可能性不大。想在线下复现,应该从哪个方向着手?
5 年多之前 回复
danielinbiti
danielinbiti 回复speeder622:总的分配的内存大小以及young和old的比例呢
5 年多之前 回复
speeder622
speeder622 1.-XX:PermSize=512m -XX:MaxPermSize=512m
5 年多之前 回复

楼主你好,我最近碰到了跟你一样的问题,也是反射,用jmap permstat 查看永久代有大量dead 的DelegatingClassLoader,但是从内存dump中没有发现任何蛛丝马迹,你说的xstream我们也用到了。
我看了下xstream的源码,你说的应该是这个类PureJavaReflectionProvider
private transient Map serializedDataCache = new WeakHashMap();
但是xstream最新版本用的还是WeakHashMap, 很想知道你这个问题最后是怎么解决的,还望赐教,在此谢过。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐