Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
系统中有大量com.mysql.jdbc.StatementImpl$CancelTask对象导致OOM异常_Mysql_Hibernate_Jdbc_Jboss - Fatal编程技术网

系统中有大量com.mysql.jdbc.StatementImpl$CancelTask对象导致OOM异常

系统中有大量com.mysql.jdbc.StatementImpl$CancelTask对象导致OOM异常,mysql,hibernate,jdbc,jboss,Mysql,Hibernate,Jdbc,Jboss,我正在使用JBoss4.2.3和mysql-connector-5.1.8。我的应用程序正在进行大量的数据库读取(以几十万计)和写操作。在一段时间内,jboss崩溃时出现OOM异常。当我检查堆转储时,我看到大量 com.mysql.jdbc.StatementImpl$CancelTask大约400万个对象占用数百MB的数据 是内存泄漏吗?它的具体用途是什么?如何禁用它 由于我将容器管理事务与ejb注入实体管理器一起使用,所以我认为不需要显式关闭。进一步挖掘后,我发现查询事务超时设置为30分钟,

我正在使用JBoss4.2.3和mysql-connector-5.1.8。我的应用程序正在进行大量的数据库读取(以几十万计)和写操作。在一段时间内,jboss崩溃时出现OOM异常。当我检查堆转储时,我看到大量
com.mysql.jdbc.StatementImpl$CancelTask
大约400万个对象占用数百MB的数据 是内存泄漏吗?它的具体用途是什么?如何禁用它


由于我将容器管理事务与ejb注入实体管理器一起使用,所以我认为不需要显式关闭。进一步挖掘后,我发现查询事务超时设置为30分钟,并启用了查询超时。看起来像是
CancelTask
对象一直存在到计时器过期。一旦我减少了事务超时时间,这些对象就会在计时器过期时被清除

如果没有看到一些代码,很难回答您的问题。。。还是


我有一种预感,您没有正确地关闭JDBC资源(连接/语句/结果集)。据我所知,这些CancelTask对象是在查询超时时创建的。

打开数据源或连接池中已放弃连接的日志记录。您可能错过了关闭某些连接的机会。如果是这种情况,您可以将remove Discarted设置为true,但这并不能代替在完成查询后正确关闭会话和数据库连接。

我在tomcat上遇到了一个类似的问题,即使用数据库连接池和MySql驱动程序时,堆中有大量未删除的
JDBCResultSet
StatementImpl
对象。经过长时间的搜索,我发现在tomcat context.xml文件中设置数据源的
maxAge
参数很有帮助