mysql连接池失效_连接池隔天失效之异常处理

一、    开发环境

    测试平台:Linux

    开发工具:Eclipse 3.x

    搭配环境:Struts2.x / Ibatis 2.0 / MySql / Tomcat6.0

二、    异常描述

    提示信息:

Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException

MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe

    描述说明:

在使用UNSAP-WEBMAIL系统时,对邮箱进行增删改查操作,在一定时间内都可正常工作,但隔天再登陆WEBMAIL系统后,发现进行一些数据库操作时,连接失效,不能正常修改保存,抛出上面的异常。

三、    异常诊断

    分析:

经查找分析,在使用MySQL的Java连接池的过程中,连接一晚上不释放,第二天就会造成超时的错误,其原因是因为MySQL默认的空闲等待时间是8个小时,一旦空闲超过8个小时,就会强制行关闭该连接,而连接池中却依然保有该连接的有效引用,有数据访问时,使用一个经被MySQL强制关闭的连接就会抛出上面异常。

    诊断:

鉴于连接失接的问题,究其原因是因为连接超时或是空连接引起的异常,解决办法一、可以加长设置其等待的时间;办法二、优化连接池设置

四、    异常处理

    设置等时间:

在MySQL服务器的配置文件my.cnf中,默认方式下,其空闲等待时间是28800秒,即8个小时,当超过这个时段,则连接断开,加长设置其等时间,只需在配置文件my.cnf中的[mysqld]块中,加入如下两行

wait_timeout = 2880000

//空闲等时间的秒数

interactive_timeout = 2880000

//服务器关闭交互式连接前等待活动的秒数

    优化连接池:

    环境一:IBATIS2.0 ,数据库连接池TYPE=“SIMPLE”

1.    第一行,是否允许检测连接状态,设置其值为TRUE。

2.    第二行,数据库连接状态检测语句,越简单越好。

3.    第三行,对持续连接时间超过设定值(毫秒)的连接进行检测,0为不检测,减少系统消耗。

4.    第四行,对空闲超过设定值(毫秒)的连接进行检测,这里设为一个小时。

    环境二:IBATIS2.0 / SPRING 2.5,数据库连接池TYPE=“DBCP”

select 1 from dual

true

1.    第一行,数据库连接状态检测语句。

2. 第二行,是否允许检测连接状态,设为TURE

五、    附加

1)    MySQL配置文件相关:

1、配置文件位置:Windows下在%MySQL HOME%/bin下有mysql.ini配置文件,Linux系统下的配置文件为/etc/my.cnf。

2、配置文件设置:wait_timeout的取值范围是 1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。

2)    连接池设置:

连接设优化设置中,IBATIS版本不同,所设置的参数名称也不相同,所以不可拿上面的设置通用于所有IBATIS版本。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-05-26 09:23

浏览 2507

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值