jaxb引起元空间oom的排查过程

  • 现象:压力测试开始 元空间就疯狂网上涨,最大值从一开始的20m改到了256m 又改到了512m ,但是根本没有用,有多少占多少。


    image.png

可以看到 元空间已经满了 ,然后疯狂进行FGC,导致了CPU飙升, 但是并没有什么卵用,所以最后就OOM了。其他Eden和OLD 都挺正常。

看看都加载类些啥:


image.png

这里有一个细节:Class非常多

  • 给jvm启动参数加上 -verbose:class 打印类加载信息,可以看到特别多的jaxb的类在被加载,速度很快。
image.png

已经确认,是jaxb的问题。看了一下代码,用的是2.1的包,但是java8要求的版本至少是2.2.8:


image.png
  • 果断把包换成2.2.11,重新启动,再次观察:


    image.png

    方法区已经降到了64m,而且增长很慢。


    image.png

    Class的数量也由原来的31万降到了1万。
    问题解决。
  • 总结
    java8+把永久代换成了元空间,那原来元空间的gc机制也有所变化,所以需要特别注意动态代理相关的jar包(像jaxb 、fastjson等 )的版本,用的时候请网上查一下,如果查不到请用较新的版本。 一般这种大厂的包都不需要自己去重写代码,新版本都会兼容对应的java版本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容