问题描述
10月9日、11月2日、11月3日,X系统发生了三次OOM情况,均表现为出现长时间未提交事务,随后引发OOM情况。
问题分析
从生产及测试环境堆Dump发现,发生OOM时内存中均有大量的DelegatingDatabaseMetadata类的对象未释放。从测试环境的复现结果看,该对象在发生OOM时占用内存达60%-70%左右。单一对象大小为20328B,堆Dump时共有49037个对象。
DelegatingDatabaseMetadata类为DBCP数据源的代理类。在每次与数据源进行交互时,均会创建该类的对象。理论上在完成与数据库交互后,相应对象即可以被标记为可释放。DelegatingDatabaseMetadata类继承AbandonedTrace类。AbandonedTrace类被用作DBCP数据源的追踪,DBCP要求所有代理类均需继承该类。根据AbandonedConfig配置情况决定该类的执行情况。
AbandonedConfig共有三个参数可配置,分别为removeAbandoned(移除作废链接),logAbandoned(记录作废链接日志),removeAbandonedTimeout(作废链接超时设置)。
继续阅读X系统OOM问题分析报告