# OA堆内存老年代使用率瞬时高

# 问题现象

OA运行过程中出现,堆内存老年代使用率偶发冲高。可通过系统管理员后台,系统维护,系统监控页面 JVM数据查看; 如图中,老年代峰值使用率87%,当前使用率只有21%;

1727079659136.png

虽然上述现象,老年代峰值使用率87%对用户没有感知;但当使用率达到100%后可能出现触发full gc,甚至内存溢出宕机 出现full gc时,oa服务无响应,用户无法正常使用;gc次数及时间可在下图位置查看

1727079973860.png

# 问题分析

由于堆内存是偶发冲高,问题持续时间可能不长,不适用通过jmap导出内存dump分析,且执行jmap过程会影响用户正常使用;而服务也没有宕机,没有生成hprof文件可供分析 因此我们需要通过火焰图或者jfr工具来实时抓取

windows环境不支持部署内存火焰图,可以使用jfr工具;在oa 8.0以上版本的SeeyonDumpTools中已经集成了jfr脚本

1727080268872.png

标准产品只需要参照dump工具的部署方法,将startdump.jcmd.jfr.bat添加到windows的任务计划中,每10分钟执行1次即可;

# 解决方案

  • 1.部署SeeyonDumpTools中startdump和jfr工具,每10分钟执行1次
  • 2.问题出现后,根据dump日志中oaStatus_202xxx开头的监控日志,找到堆内存老年代当前使用率接近peak值或较高的时间

1727080685279.png

  • 3.以这个时间查找并取出对应的jfr日志,发给研发或架构分析

1727080757546.png

dump日志1分钟1次,jfr是10分钟1次;因此尽量取问题时间前后2个jfr

创建人:wangyxyf
修改人:wangyxyf