我正在使用Java库C3PO实现与MySQL数据库的连接池。我正在记录查询前后的连接,以识别连接泄漏。我发现一个查询使用了将近20个连接,而实际上,当我检查MySQL进程列表时,它创建了50个新进程。这会导致整个webapp失败,因为后端无法再连接到数据库。
下面是导致泄漏的方法的一些伪代码。
public List<Interaction> getInteractions() {
// Log the # of connections before the query
logNumConnections();
--> stdout: Total (7) Idle: (2) Busy: (5) Orphan: (0)
// Here's the query that's causing the leak
String sql="select distinct ... from A left join B on A.x=B.y "
+ "where A.x in (?,?,...)"
List<Interaction> results = jdbcTemplate.query(sql, args, rowMapper);
// Log the # connections after the query
logNumConnections();
--> stdout: Total (24) Idle: (0) Busy: (24) Orphan: (0)
return results;
}
JdbcTemboard应该关闭连接并释放资源。它不应该为一个查询使用20个连接!这些连接在查询后很长时间都会存在。这是我的JdbcTemboard和DataSource的配置。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${database.driver}" />
<property name="jdbcUrl" value="${database.url}"/>
<property name="user" value="${database.username}"/>
<property name="password" value="${database.password}"/>
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="50" />
<property name="acquireIncrement" value="1" />
<property name="maxStatements" value="1000" />
<property name="maxStatementsPerConnection" value="1000"/>
<property name="maxIdleTime" value="10000"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>
<ref bean="dataSource" />
</constructor-arg>
</bean>
最后,这里是explain语句
id|select_type|table|type |possible_keys|key |key_len|rows | Extra
1|SIMPLE |A |ALL |NULL |NULL |NULL |437750| Using where; Using temporary
1|SIMPLE |B |eq_ref|PRIMARY |PRIMARY|4 |1
知道是什么导致了这个连接泄漏吗?
发现问题。导致连接泄漏的不是上面的查询。这是对单独方法的单独AJAX调用,该方法与上述查询在同一时间段内执行。上面的查询/方法毕竟没有引起任何问题。
我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个优秀的库,但它现在抛出了以下错误: 现在我知道连接泄漏意味着打开的连接在某个地方漂浮,但我不知道如何或在哪里漂浮。 下面是我的数据库类中的一个方法,根据堆栈跟踪,错误应该发生在这里。 这只是启动语句的一个基本方法。调用它时,我使用它,然后调用、和 但它告诉我连接是打开的。 我怎么解决这个?谢了!
我有一个mqtt客户端从主题获得请求订阅,然后我把它给固定大小的线程池50。我使用hikaricp 2.4.2为数据库池MySQL数据库。 Im目前使用2.4.2,这是我的设置 以下是完整的日志信息: 警告日志: 811439[Hikari管家(池HikariPool-0)]警告。扎克瑟。希卡里。水塘ProxyLeakTask-已为连接com触发连接泄漏检测。mysql。jdbc。JDBC4Con
我有一个带有和对象的。每次调用,我都会执行以下操作: 我不关闭,因为没有关闭方法。每次调用servlet时,mongo中使用的连接数都会增加: 什么是与mongo和morphia建立联系的正确方式?这种联系到底在哪里?谢谢
我正在Scala应用程序中使用Apache Http客户端。 该应用程序具有相当高的吞吐量和高并行性。 我不确定,但我想我可能是在泄露连接。似乎每当使用客户机的代码部分变得繁忙时,应用程序就会失去响应。我的怀疑是,我正在泄漏套接字或其他东西,从而导致应用程序的其他方面停止工作。与其说是连接泄漏,还不如说是关闭速度不够快。 对于更多上下文,有时,某些操作会导致此代码每分钟并行执行数百次。当这种情况发
我在webapp(hibernate-core-4.3.8。Final和Spring 3.2.11。RELEASE)上使用Spring和hibernate。我使用hikaricp(v 2.2.5)作为连接池impl,它检测连接泄漏并打印下面的stacktrac。我使用Spring的声明性事务划分,因此我假设资源的管理和清理是由Spring/hibernate完成的。因此,我认为Spring或hib
前几天收到FUNPLUS笔试邀请,今天19点进行线上笔试。要开启摄像头和麦克风,笔试不能迟到超过15分钟,十道题一小时。 我本来想着这题量,睡一会儿都能做完,结果我错了。 18:55准备好设备打开笔试链接,页面上5分钟倒计时,不到点不能进入。 19:00点击进入,一直爱的魔力转圈圈。 19:15继续转圈圈(进入加载页面就不算迟到) 中途切wifi连接、换浏览器,都没用,而且提示中途离开两次。 19