我在6.4.0-jre8版本中使用mssql-jdbc驱动程序。
我执行一个简单的SELECT *
查询,该查询可能返回数百万行。为了避免OOM错误,我定义了responseBuffering=adaptive
和fetchSize=10000
。我还确保ResultSet
是type_fetch_only
和concur_read_only
。尽管如此,我仍然收到OOM错误。堆大小立即飙升至XMX限制。
下面您可以找到内存转储分析。我想知道为什么TDSPackets没有足够早地释放?
在这里,如何避免OOM错误,我将不胜感激。谢谢!
答案 0 :(得分:1)
问题是我在同一连接上同时执行多个查询。
避免在同一连接上同时执行多个语句。在处理前一条语句的结果之前执行另一条语句可能会导致未处理的结果被缓冲到应用程序内存中。