cos因为数据库表造成的OOM问题

一、背景

在测试环境海外白牌eu环境中,cos服务一直不健康;原因是pod.yml中没有配置liveness,导致服务没有被容器重启;

随后查看日志发现服务触发了OOM异常。

img

二、原因

使用jmap命令(jmap -dump:format=b,file=heapdump.hprof 1)打印出服务的内存dump文件;

使用MemoryAnalyzer分析dump文件;

img

发现大对象是ShardingSphereDataSource,查看这个对象的外引用发现是数据库表实例;

img

img

img

最终发现table元数据存在47256个结点;查看node中的value发现数据是表名,但是环境内的表最多存在2567+12830=5632张表,很明显47256是异常的;

查看数据库表中对应的cos_video库,发现其中存在50000+的表(没截图了),应该是环境内每日清理过期表的任务执行失败或者没有执行导致的;

删除cos_video库中过期的表问题解决。