使用中的连接,连接池并不会强制释放。 maxIdleTime 是释放那些长期没有被使用的数据库连接,可以一直释放到仅剩minPoolSize数量为止。自动测试没必要开,你已经开启了testConnectionOnCheckout,其它其实都没必要开启了。 连接池应该不会引发“Waiting for table”的问题,恐怕不需要从连接池进行分析。做个实验: 当程序发生大量“Waiting for table”时,单独用一个Java程序,以JDBC方式去操作MySQL的T_USER_LOGS表,看看是否会被锁住?
c3p0配置<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="minPoolSize" value="5"/>
<property name="maxPoolSize" value="300"/>
<property name="initialPoolSize" value="10"/>
<property name="maxIdleTime" value="1800"/> //1800释放会不会过长?
<property name="acquireIncrement" value="5"/>
<property name="acquireRetryAttempts" value="30"/>
<property name="breakAfterAcquireFailure" value="true"/>
<property name="testConnectionOnCheckin" value="true"/>
<property name="automaticTestTable" value="C3P0TestTable" />
<property name="idleConnectionTestPeriod" value="18000" />
<property name="testConnectionOnCheckout" value="true" />
</bean>
按理说 <property name="maxIdleTime" value="1800"/> ,这样半小时就会自动释放,自己测试的时候也是如此.其他参数也不觉得有什么不正常
但是实际情况往往就是这样的意外还有就是关于这个的自动测试,会非常占用内存吗?监控到每天自动测连接的时候cpu暂用率会飙升
昨天用loadrunner测试并发登录,当系统挂掉的时候,查看了连接情况,和帖子链接文档中的情形类似。。
换句话说,不停的登录登录登录,系统就会被干掉,可能会出现上面的情况,现在还在读代码中,看看哪儿能优化优化。稍稍问一下情况1:
我去搜索了一下表类型的介绍,发现MyISAM引擎不支持事务,现在怀疑由于并发登录过多(登录采用的是ajax的异步处理),程序中的事务处理未能起到作用,导致表T_USER_LOGS被干掉这个有可能吗?
图如下
只有红框中的10个连接是按时关闭,然后又自动创建10个新的连接。。为毛上面那200多个连接 不会释放啊 想半天没想到为何,也不知道如何下手
maxIdleTime 是释放那些长期没有被使用的数据库连接,可以一直释放到仅剩minPoolSize数量为止。自动测试没必要开,你已经开启了testConnectionOnCheckout,其它其实都没必要开启了。
连接池应该不会引发“Waiting for table”的问题,恐怕不需要从连接池进行分析。做个实验:
当程序发生大量“Waiting for table”时,单独用一个Java程序,以JDBC方式去操作MySQL的T_USER_LOGS表,看看是否会被锁住?