基于某项目因OOM宕机的问题分析排查及解决--EXCEL导入

背景

该项目自2021年6月23日下午15:40起突然内存告警,后迅速宕机。基于系统自愈机制,先后拉起4次均宕机。后续扩容内存后发现内存实际占用超过合理值,影响用户部分业务,后协调跟进分析。


/uploads/question/20210625/ba1a66830766a4bc318e481f86530e0c.jpg
通过NMC日志发现内存占用明显异常
http://nccloud.yytimes.com/uploads/question/20210625/ecb3417cb56875eb32d491acba031f1f.png

现象

内存占用快速走高,且会持续占满分配的堆内存空间,导致FULL GC,但因资源不足引起系统挂起。


起初的异常是OOM

http://nccloud.yytimes.com/uploads/question/20210625/6f65aa7119543ca2872323fafb0824f1.png

后面扩容内存后,不再触发OOM,但是异常发生时内存占用直接跑满

http://nccloud.yytimes.com/uploads/question/20210625/95f5ae29643f8c67fb250f7037bffc2c.png

监控NMC发现有疑似导入类操作,同步生成系统DUMP分析,并引导项目暂停HR数据导入类操作。

http://nccloud.yytimes.com/uploads/question/20210625/bbff2f3affbfd2939b085671f9d88311.png

与项目协调沟通后确认的确部分业务在做工资导入,但现场顾问使用客户导入文件进行了实操未复现问题。故继续跟进DUMP分析。

分析dump发现,有1个线程占用了94%的内存,应该是导致系统宕机的线程


http://nccloud.yytimes.com/uploads/question/20210625/a124a24430234097ce5a8f278f434129.png

逐级展开问题线程后发现,存在大量的

org.apache.xmlbeans.impl.store.Xobj$AttrXobj

org.apache.xmlbeans.impl.store.Xobj$ElementXobj

线程,根据查询到的类似方法功能,为excel导入时的操作,且大概率为操作poihttp://nccloud.yytimes.com/uploads/question/20210625/04e799ca6562b3351d933224fdfee337.png

参考网络上的经验,很可能是是在处理表格空行时引发的问题。类似其他问题场景涉及代码如下:

http://nccloud.yytimes.com/uploads/question/20210625/9ee9de00c9d9ec2f05316b7525557b92.png

据经验,上述代码的本意是将excel中的所有空行过滤掉,对于一个正常的excel是没有任何问题,但是如果是excel文件中存在大量空行,就可能会出现问题。


根据这一线索,再次与项目组沟通确认,要求提供对方导入的文件及让用户自行操作配合复现后发现,在某一用户做工资导入计算时触发问题。获取其导入的文件后发现:该文件本为处理147个人的工资信息,但实际文件体积41.5MB,包含excel行数1048576行(为excel支持的最大行)。即excel中存在海量的空行。

源文件:

http://nccloud.yytimes.com/uploads/question/20210625/0d7d220486a9d2825615c43f907f078e.png

修改后:

http://nccloud.yytimes.com/uploads/question/20210625/32b1476d1040c6c16c02af9b232d3e90.png

基于上述问题引导用户修正文件后,文件体积回归到111KB,导入顺利完成。至于此前反馈导入无误,经顾问确认,该用户的导入文件有2个,提供给顾问验证的是一个历史版本的小文件。


解决该问题后,经过24小时的用户全业务常态运行监控,系统整体负载等保持正常水平,用户业务恢复正常,可以确认本次系统异常的诱因为异常的文档导入导致。

http://nccloud.yytimes.com/uploads/question/20210625/d0ad9508e0a91e7a25145d03b6d4b73f.png



小结:在文件导入场景,业务侧从设计角度,考虑到正常的业务场景,不会出现类似海量数据。故没有过多的限制用户的导入文件大小行数等。故而在遇到这种异常数据内容的文件时,引发类似问题。 从业务使用场景建议用户注意查看文件大小和内容的合理性,同时产品侧要增加类似场景的兼容性,避免某个问题影响整个系统使用。




已邀请:

要回复问题请先登录注册