当我们运行大量 SQL 查询时,就会遇到 OOM。我们正在使用 Apache Ignite 2.15。非常标准的查询代码,如下所示,
SqlFieldsQuery sqlQuery = new SqlFieldsQuery(query);
if (args != null) {
sqlQuery.setArgs(args);
}
FieldsQueryCursor<List<?>> cursor = cache.query(sqlQuery);
进行堆分析表明,“org.apache.ignite.internal.processors.query.RunningQueryManager”具有一个维护所有正在运行的查询的引用的映射。但似乎没有清理地图后查询执行。
在尝试进一步查找时,我们发现了对同一问题的引用,但没有任何活动,
https://issues.apache.org/jira/browse/IGNITE-13130
Apache Ignite:点燃堆中占用过多内存的堆上缓存。导致应用程序抛出OutOfMemory异常
任何帮助表示赞赏。
在我创建重现器时进一步调试它。发现对未关闭的光标的深层隐藏引用。关闭该参考后,此问题已解决。谢谢。