原创:解决tomcat: Software caused connection abort: ...
2012-07-06 00:00
381 查看
现象:
服务器是tomcat 6, 数据库是Mysql 5.1。web应用部署后,周一到周六都运行正常,但是周日该应用就无法连接数据库。
我是因为周一到周六一直都有访问,如果是隔一段时间就不能连接数据库,应该也是一样的原因。这里先说现象然后说解决办法最后说原因。
服务器报错如下:
严重: java.sql.SQLException: Already closed.
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1953)
。。。。。。(省略)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2579)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2867)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
。。。。。。(省略)
解决办法:
1. 打开Mysql的安装路径,进入文件夹MySQL Server 5.1,找到文件my.ini(windows) 或 /etc/my.cnf 并打开,在文件最末尾添加:
interactive_timeout=288000
2. 重启mysql服务
3. 重启tomcat (为了保险我重启了,没试过不重启行不行,按道理不重启也行)
ok 没有了。等吧,到周日了, 问题不发生了。
原因:
这个异常是由于连接池的连接没有被释放,而MySQL默认的空闲等待时间是8个小时,也就是28800秒,一旦空闲超过8个小时,就会抛出异常。在my.ini文件末尾添加interactive_timeout=288000,实际上是将MySQL默认的空闲等待时间设置为80小时,这样暂时就没问题了。
但是真有一次就是80多小时的空闲时间呢?不怕,改成315360000, 也就是10年。。。
呵呵,虽然认为这是一种解决办法,但是个人情感上总是过不去,还在考虑其他的解决办法。保持更新。。。
服务器是tomcat 6, 数据库是Mysql 5.1。web应用部署后,周一到周六都运行正常,但是周日该应用就无法连接数据库。
我是因为周一到周六一直都有访问,如果是隔一段时间就不能连接数据库,应该也是一样的原因。这里先说现象然后说解决办法最后说原因。
服务器报错如下:
严重: java.sql.SQLException: Already closed.
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1953)
。。。。。。(省略)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2579)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2867)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1616)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1708)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
。。。。。。(省略)
解决办法:
1. 打开Mysql的安装路径,进入文件夹MySQL Server 5.1,找到文件my.ini(windows) 或 /etc/my.cnf 并打开,在文件最末尾添加:
interactive_timeout=288000
2. 重启mysql服务
3. 重启tomcat (为了保险我重启了,没试过不重启行不行,按道理不重启也行)
ok 没有了。等吧,到周日了, 问题不发生了。
原因:
这个异常是由于连接池的连接没有被释放,而MySQL默认的空闲等待时间是8个小时,也就是28800秒,一旦空闲超过8个小时,就会抛出异常。在my.ini文件末尾添加interactive_timeout=288000,实际上是将MySQL默认的空闲等待时间设置为80小时,这样暂时就没问题了。
但是真有一次就是80多小时的空闲时间呢?不怕,改成315360000, 也就是10年。。。
呵呵,虽然认为这是一种解决办法,但是个人情感上总是过不去,还在考虑其他的解决办法。保持更新。。。
相关文章推荐
- 使用Putty访问服务器时,间隔出现Software caused connection abort的解决
- putty登录linux出现network error:software caused connection abort解决办法
- Putty出现"Network error:Software caused connection abort"的解决办法
- network error:software caused connection abort解决办法
- putty提示Network error:Software caused connection abort解决方法
- Software caused connection abort: recv failed 的解决办法
- putty 虚拟机时报 "software caused connection abort" 解决方法
- 解决putty network error software caused connection abort 自动中断
- [MySQL]Software caused connection abort: recv failed 问题分析与解决
- 解决Java使用c3p0连接池连接mysql数据库出现MESSAGE: Software caused connection abort: socket write error的问题
- Software caused connection abort解决办法
- putty中出现Network error:Software caused connection abort 的解决办法
- 解决Hibernate报java.net.SocketException:Software caused connection abort:socket write error
- 解决putty network error software caused connection abort 自动中断
- [MySQL]Software caused connection abort: recv failed 问题分析与解决
- putty提示Network error:Software caused connection abort解决方法
- 解决putty network error software caused connection abort 自动中断
- Software caused connection abort解决办法
- java.net.SocketException: Software caused connection abort: recv failed 异常分析
- 异常: Software caused connection abort: socket write error