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
- mysql性能变量已基于Percona Toolkit配置
我的具体问题是:
- 此错误是由网络引起的吗?因为它看起来完全是随机的。
- 这是适合该 mysql 版本的 mysql 连接器还是这可能是所有错误的根源?
谢谢
最佳答案
Broken pipeline
消息意味着另一端关闭了连接,可能是因为接收到的数据包顺序错误,或者因为客户端和服务器之间的状态不同步或类似的原因。也许您的应用程序和服务器之间存在防火墙来终止持久连接?或者也许一段时间内管道(连接)上没有任何 Activity ,并且服务器关闭了它?无论如何,如果您使用连接池机制(you should!) ,应该可以将此类情况的处理委托(delegate)给它。
或者,如果您打算始终使用 MySQL,则可以尝试将 failOverReadOnly=false&maxReconnects=10&autoReconnect=true
添加到连接字符串中。这是特定于 MySQL JDBC 驱动程序的,因此,我强烈建议您配置连接池机制来测试连接,然后再将连接传递到应用程序。
关于java - 间歇性 JDBC 管道损坏和链接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707104/