典型问题 元空间内存溢出

元空间内存溢出

典型问题 / 典型问题/宕机/元空间内存溢出.md

元空间内存溢出

典型现象/特征

  1. 表单相关功能超时或相关功能异常
  2. pod宕机或重启

排查确认步骤

可按照以下证据链进行确认:

  1. 1.可先通过异常接口定位具体异常服务,确认服务是否发生宕机或重启;
  2. 2.检查宕机前或重启前日志中是否出现 OutOfMemoryError: Metaspace​ (或 PermGen space)
  3. 3.再查看服务挂载目录,确认是否生成 heapdump 文件;

如果上面3条信息都符合,可确认为元空间内存溢出。

更多判断依据参考如下:

  1. 1. 如果异常业务点主要集中在表单相关功能,且日志中存在表单加载、卸载等信息,可进一步支持应用元空间内存溢出的判断。
  2. 2.结合服务非堆内存监控,确认是否存在非堆内存持续高位运行(通常大于 85%)或异常时段监控突然缺失;
  3. 3.接着通过巡检工具或人工检查应用 yaml 中的资源配置,确认java中内存配置和容器的 limitrequest 等参数是否明显偏低或配置不合理,如不合理则需要在后续恢复时调整。

分析工具

  1. 一键采集工具
  2. jvm分析工具 中的内存信息性能分析
  3. 系统监控查看说明 中的内存GC部分
  4. 系统日志查看指引info 日志查看

常见应急恢复策略

text
- 修改对应异常服务的部署模板,做以下调整(调整需参考服务推荐配置和客户使用量等综合分析)
1、确认为元空间不足,调整java启动参数中: -XX:MetaspaceSize -XX:MaxMetaspaceSize 
一般可再原配置基础上调30%-50%
2、还需同步调整部署yaml文件,按照java启动参数的调整,同样增加yaml中资源限制部分:
        resources:
            limits:            
              memory:  #根据java配置中增加适当调整
            requests:
              memory:  #根据java配置中增加适当调整