cos因为数据库表造成的OOM问题
一、背景
在测试环境海外白牌eu环境中,cos服务一直不健康;原因是pod.yml中没有配置liveness,导致服务没有被容器重启;
随后查看日志发现服务触发了OOM异常。

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

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



最终发现table元数据存在47256个结点;查看node中的value发现数据是表名,但是环境内的表最多存在2567+12830=5632张表,很明显47256是异常的;
查看数据库表中对应的cos_video库,发现其中存在50000+的表(没截图了),应该是环境内每日清理过期表的任务执行失败或者没有执行导致的;
删除cos_video库中过期的表问题解决。