一、 开发环境
测试平台:Linux
开发工具:Eclipse 3.x
搭配环境:Struts2.x / Ibatis 2.0 / MySql / Tomcat6.0
二、 异常描述
提示信息:
Caused by: com.municationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
.SocketException
MESSAGE: Broken pipe
STACKTRACE:
.SocketException: Broken pipe
描述说明:
在使用UNSAP-WEBMAIL系统时,对邮箱进行增删改查操作,在一定时间内都可正常工作,但隔天再登陆WEBMAIL系统后,发现进行一些数据库操作时,连接失效,不能正常修改保存,抛出上面的异常。
三、 异常诊断
分析:
经查找分析,在使用MySQL的Java连接池的过程中,连接一晚上不释放,第二天就会造成超时的错误,其原因是因为MySQL默认的空闲等待时间是8个小时,一旦空闲超过8个小时,就会强制行关闭该连接,而连接池中却依然保有该连接的有效引用,有数据访问时,使用一个经被MySQL强制关闭的连接就会抛出上面异常。
诊断:
鉴于连接失接的问题,究其原因是因为连接超时或是空连接引起的异常,解决办法一、可以加长设置其等待的时间;办法二、优化连接池设置
四、 异常处理
设置等时间:
在MySQL服务器的配置文件f中,默认方式下,其空闲等待时间是28800秒,即8个小时,当超过这个时段,则连接断开,加长设置其等时间,只需在配置文件f中的[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/f。
2、配置文件设置:wait_timeout的取值范围是 1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
2) 连接池设置:
连接设优化设置中,IBATIS版本不同,所设置的参数名称也不相同,所以不可拿上面的设置通用于所有IBATIS版本。
分享到:
-05-26 09:23
浏览 2507
分类:数据库
评论