Mysql 从DBCP断开连接,为什么?

Mysql 从DBCP断开连接,为什么?,mysql,timeout,connection-pooling,load-testing,haproxy,Mysql,Timeout,Connection Pooling,Load Testing,Haproxy,我有一个webapp(Tomcat/Hibernate/DBCP 1.4),它可以运行针对MySQL的查询,对于特定的负载,比如说每秒50个查询,它可以正常工作。当我通过HAProxy路由相同的中等负载(仍然只使用一个数据库)时,我得到一个失败,可能每500个查询就有一个失败。我的应用程序报告: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The

我有一个webapp(Tomcat/Hibernate/DBCP 1.4),它可以运行针对MySQL的查询,对于特定的负载,比如说每秒50个查询,它可以正常工作。当我通过HAProxy路由相同的中等负载(仍然只使用一个数据库)时,我得到一个失败,可能每500个查询就有一个失败。我的应用程序报告:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 196,898 milliseconds ago.    The last packet sent successfully to the server was 0 milliseconds ago.
at sun.reflect.GeneratedConstructorAccessor210.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3567)
...
Caused by: 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:3017)
...
同时,HAProxy日志显示了许多条目,如:

27] mysql mysql/db03 0/0/34605 2364382 cD 3/3/3/3/0 0/0
Oct 15 15:43:12 localhost haproxy[3141]: 127.0.0.1:35500 [15/Oct/2012:15:42:50.0
“cD”显然表示客户端超时的状态。所以当我的webapp说HAProxy拒绝接受新的连接时,HAProxy说我的webapp不接受数据返回

我没有包括HAProxy配置,因为我尝试了许多不同的参数值,结果基本相同。特别是,我在全局和服务器部分都将maxconn设置为高值和低值,统计数据中经常出现的情况是最大会话数不超过7。我的JDBC池大小也很高

通常可以同时使用JDBC池和HAProxy池吗?人们以前遇到过这种问题吗

我有一个解决方法,就是在每次查询之前发送一个“验证查询”。但这有一定的开销,我仍然想知道为什么我的webapp在直接连接到MySQL时成功了,但在通过HAProxy时却被断开了连接

如何进一步调试并获得比“cD”更多的信息?我尝试在调试模式下运行HAProxy,但它似乎没有透露更多信息。

尝试以下操作:

tune.bufsize 20480
tune.maxrewrite 2048
看看他们的意思。当你进入潜在致命参数的灰色地带时,你必须全神贯注地做这件事。但值得一试,看看这是否有效。我刚刚解决了一个与文档相比毫无意义的问题


默认值是16k对1k。

谢谢。对不起,我不知道这是否是正确的解决方案,因为在我得到你的答案之前我就开始了。你总是可以表现出你的感激之情,然后提高它。不需要接受无法验证的东西。@jamesmcabe你说你已经走了。。。因为你找到了一个解决方案?有点旧,但是你可以分享这个解决方案作为参考。我确实有类似的问题。你在下面提到你“继续前进”。。。你能告诉我你是怎么解决这个问题的吗?