这个问题已经被问了几次,在其他网站,所以和很多次。 但我没有得到任何令人满意的答案。
我的问题:
我有一个使用简单的JDBC通过GlassFish应用服务器连接到MySQL数据库Java Web应用程序。
我已经使用在以下配置GlassFish服务器连接池:
初始池大小:25
最大池大小:100
池调整大小数量:2
空闲超时300秒
最长等待时间:60,000毫秒
该应用程序已经部署了近3个月,它也完美运行。
但是,从最近2天以下的错误是在登录的时候到来。
部分堆栈跟踪
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:
** BEGIN NESTED EXCEPTION **
com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.io.EOFException
MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
STACKTRACE:
java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
............
............
my application traces....
什么顿时引起这个错误? 我已经失去了很多的时间讨论这个。
编辑:这个问题甚至重新启动服务器后仍然存在。 按DBA两个重要的MySQL服务器的配置是:
WAIT_TIMEOUT:1800秒
connect_timeout:10秒
注:部署在同一台服务器的其他应用程序连接到同一个数据库,并使用不同的池平稳运行。
EDIT 2:读了很多东西,并期望我做了这些改变我的连接池中的某些积极成果之后。
最大等待时间:0(以前是60秒)
连接验证:必填
验证方法:表
表名:演示
验证Atmost一旦:40秒
创建重试次数:1
重试间隔:5秒
最大连接用法:5
而这个工作作为应用程序运行3天持续。 但我得到的这份非常奇怪和有趣的结果。 当监控连接池,我发现这些数字:
NumConnAcquired:44919计数
NumConnReleased:44919计数
NumConnCreated:9748计数
NumConnDestroyed:9793计数
NumConnFailedValidation:70伯爵
NumConnFree:161计数
NumConnUsed:-136计数
该如何才能NumConnFree
成为161,因为我有Maximum Pool Size = 100
?
该如何才能NumConnUsed
变成-136, 负数 ?
如何才能NumConnDestroyed
> NumConnCreated
?