【问题标题】:Hike in meta space and classes loaded在元空间和加载的类中远足
【发布时间】:2018-07-31 17:50:01
【问题描述】:

将应用程序升级到 Java 8 后遇到问题。

基于 APM 图的观察:

从 40K 加载到 120K 的类突然跳跃,同时元空间从 20Mb 爬升到 256Mb(现在已删除它的最大定义)。

错误:java.lang.OutOfMemoryError: Metaspace

GC 数据:*[Full GC (Last ditch collection) [PSYoungGen: 0K->0K(1394688K)] [ParOldGen: 68568K->68568K(2796544K)] 68568K->68568K(4191232K), [Metaspace: 251049K->251049K(1239040K)], 0.2309780 secs] [Times: user=0.32 sys=0.00, real=0.23 secs]*

• 120k 类文件正在加载到元空间内存中,但没有被卸载。

相关JVM参数:

    -Xms256M \
   -Xmx4g \
   -XX:+HeapDumpOnOutOfMemoryError \
   -XX:+PrintGCDetails \
   -XX:+TraceClassUnloading \
   -XX:+TraceClassLoading \
   -XX:HeapDumpPath=/somepath \
   -XX:MetaspaceSize=64m \

我最近添加了 TraceClassUnloading 和 TraceClassLoading 来获取根本原因。

任何其他解决方案都会非常有帮助,如果需要更多信息,请告诉我。

【问题讨论】:

    标签: java memory jvm out-of-memory heap-memory


    【解决方案1】:

    永久修复:更新 JAXB-IMPL 的版本。

    添加临时解析的VM参数:

    Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true

    【讨论】:

      【解决方案2】:

      您可以使用以下命令查找元空间中加载的类

      jcmd PID GC.class_stats

      后者需要-XX:+UnlockDiagnosticVMOptions

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 2017-10-06
        • 2017-02-24
        • 1970-01-01
        • 2017-06-23
        相关资源
        最近更新 更多