测试的版本 0.2.26--->1.0.15 --->1.1.10 都存在这个问题.
当activeCount等于maxActive的时候. 没有发起物理连接就报获取链接超时异常了.0.2.26版本的 Druid-ConnectionPool-Create 线程会挂掉 1.0.15跟1.1.10 线程正常
<bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://aliyun_rds_mysql_5.5/sys_data_admin?useLocalSessionState=true&autoReconnect=true&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="XXX"/>
<property name="password" value=""/>
<property name="maxActive" value="100"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="10000"/>
<property name="minIdle" value="1"/>
<property name="timeBetweenEvictionRunsMillis" value="3000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<property name="connectionProperties" value="diamond-coord=XXXX.XXXX"/>
<property name="passwordCallback" ref="passwordCallback"/>
</bean>
最近几天频繁 可以重现
1条答案
按热度按时间dl5txlt91#
运行时获取状态
println(druidDataSource.getActiveCount() + "\t" + druidDataSource.getActivePeak() + "\t" + druidDataSource.getMaxActive());
74 87 100
从TCP获取数据库物理连接数量
netstat -anp|grep {dbip}|grep {pid}|wc
7
为了保留现场,不重启服务. 通过反射手动调低参数. 执行之后获取连接正常
Field activeCountField = DruidDataSource.class.getDeclaredField("activeCount");
activeCountField.setAccessible(true);
activeCountField.set(druidDataSource,30);