问题描述
<!-- 初始化连接 --> <initialSize value="1"></initialSize> <!-- 最大空闲连接 --> <maxIdle value="200"></maxIdle> <!-- 最小空闲连接 --> <minIdle value="1"></minIdle> <!-- 最大连接数量 --> <maxActive value="500"></maxActive> <!-- 是否在自动回收超时连接的时候打印连接的超时错误 --> <logAbandoned value="true"></logAbandoned> <!-- 是否自动回收超时连接 --> <removeAbandoned value="false"></removeAbandoned> <!-- 超时时间(以秒数为单位) --> <removeAbandonedTimeout value="65"></removeAbandonedTimeout> <!--空闲时是否进行验证,检查对象是否有效,默认为false --> <testWhileIdle value="true"></testWhileIdle> <!--则每timeBetweenEvictionRunsMillis毫秒检查一次连接池中空闲的连接, 把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止. --> <timeBetweenEvictionRunsMillis value="10000"></timeBetweenEvictionRunsMillis> <!--在每次空闲连接回收器线程(如果有)运行时检查的连接数量 --> <numTestsPerEvictionRun value="10"></numTestsPerEvictionRun> <type value="1"></type> <defaultAutoCommit value="true"></defaultAutoCommit> <defaultReadOnly value="false"></defaultReadOnly> <defaultTransactionIsolation value="READ_COMMITTED"></defaultTransactionIsolation> <!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 --> <maxWait value="10000"></maxWait>请各位高手给出宝贵意见,系统已经上线,有的时候出这种问题,重启tomcat又能维持一段时间,有时候短时间内也会出现此类问题。
解决方案
没有配validation query, 空闲检查没有生效maxidle和maxactive之差不宜过大Time between eviction run mills 太短了,才10秒间隔,起码上个小时级别系统挂了可能是数据库端把连接断了,所以连接池里还残留了老的坏了的连接。再加上validation sql没配,检查连接机制没有起作用。
解决方案二:
没有日志吗?我之前了遇到过,连接池好像对数据库指针一直持有,不放,导致数据库的指针达到最大,然后连接就断掉了。
解决方案三:
推荐玩玩阿里的druid