JVM堆内存溢出
典型现象/特征
- 接口超时,功能无响应
- pod宕机或重启
排查确认步骤
可按照以下证据链进行确认:
- 1.先通过异常接口定位具体异常服务,确认该服务是否宕机或重启;
- 2.查看宕机前或重启前的应用日志,检测是否存在
OutOfMemoryError: Java heap space关键异常信息。 - 3.查看服务挂载目录,确认是否生成
heapdump文件;
如果上面3条信息都符合,可确认为堆内存溢出。
更多判断依据参考如下:
- 1.结合服务堆内存监控,确认是否存在堆内存长期高位运行(通常大于 85%)或在异常时段监控突然缺失的情况;
- 2.同时检查宕机或重启前是否出现多次
Full GC(如超过 2 次); - 3.接着通过巡检工具或人工检查应用
yaml中的资源配置,确认java中内存配置和容器的limit、request等参数是否明显偏低或配置不合理,如不合理则需要在后续恢复时调整。
分析工具
常见应急恢复策略
text
- 修改对应异常服务的部署模板,做以下调整(调整需参考服务推荐配置和客户使用量等综合分析)
1、确认为堆空间OOM,调整部署模板中java启动参数配置中: -Xms -Xmx ; 一般可再原配置基础上调30%-50%
2、需同步调整部署yaml文件,按照java启动参数的调整,同样增加yaml中资源限制部分:
resources:
limits:
memory: #根据java配置中增加适当调整
requests:
memory: #根据java配置中增加适当调整