间歇性JDBC断管和链路故障

时间:2016-06-08 15:41:10

标签: java mysql jdbc database-connection

 Excepcion:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
 ...
 Caused by: java.net.SocketException: Broken pipe

我已经阅读了很多与此类似的问题。 所以,在宣布这个问题“不值得”之前,让我澄清一些事情

我的JDBC链接完全正常工作。

  • 没有身份验证问题
  • Sql已启动并正在运行
  • max_connections,即300,永远不会到达
  • 并发线程连接始终在5到9之间
  • 我正在使用MySQL 5.0.95(是的......我知道,我无法控制服务器资源)
  • 和Mysql-connector-java 5.1.5
  • 已根据Percona Toolkit
  • 配置了mysql性能变量

我的具体问题是:

  • 这个错误是由网络引起的吗?因为它看起来像是完全随机的。
  • 这是mysql版本的propper mysql-connector还是可能是所有错误的来源?

谢谢

1 个答案:

答案 0 :(得分:2)

Broken pipe消息表示另一端关闭了连接,可能是因为收到的数据包顺序错误,或者因为客户端和服务器之间的状态未同步或类似的情况。也许你的应用程序和服务器之间有一个防火墙可以杀死持久连接?或者也许管道(连接)上没有任何东西发生了一段时间,服务器关闭了它?在任何情况下,如果您使用连接池机制(you should!),则应该可以将此类情况的处理委托给它。

或者,如果您打算始终使用MySQL,可以尝试将failOverReadOnly=false&maxReconnects=10&autoReconnect=true添加到连接字符串中。这是MySQL JDBC驱动程序特有的,因此,我建议您配置连接池机制,以便在将连接交付给应用程序之前测试连接。