1回复
4年前
metaspace空间不足导致Full gc频繁,cpu 100%
问题现象:服务器运行一段时间之后服务卡死,无法对外提供服务。
jvm设置:
-Xms1536m -Xmx1536m -Xss256k -XX:CompressedClassSpaceSize=256m -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M
使用的是CMS垃圾收集算法,之所以metaspace设置为64M是因为之前java7时候perm空间设置为64M,一直用着都没有问题,代码也没有变化,所以就这么设置。通过定位我们发现gc日志中频繁的进行Full gc,jvm线程的cpu达到100%,堆栈中的所有请求处于blocked状态,服务挂死。
使用jvisualvm监控,metaspac空间从最开始处于波浪状态到变成一条直线(最低值),所以刚开始是有进行回收的,现在想不明白,为什么回收了还会因为空间不足Full gc,而且频率非常高,有可能会产生碎片,但是这个怎么看?
产生metaspace内存泄露的代码已经找到,是因为JAXclient不断create导致的,但是对这个问题现象没法解释,希望得到解答,谢谢!
gc日志都是Metadata GC Threshold 和 Last ditch collection ,整个CMS收集有些只执行了Initial Mark。
3645 阅读