mysql - 空闲服务器上的 Broken Pipe 异常

标签 mysql sockets tcp connection-pooling dropwizard

我正在使用 dropwizard 服务器来处理 http 请求。这个 dropwizard 应用程序支持我的 mysql 服务器用于数据存储。但是当闲置(过夜)时,它会给出“破管异常” 我做了一些我认为可能有帮助的事情。我将yaml文件中的jdbc url设置为'autoConnect=true'。我还添加了一个“checkOnBorrow”属性。我增加了 jvm 以使用 4gb 这些修复都没有用。 mysql 服务器的 wait_timeout 和 'interactive_timeout 也设置为 8 小时。 这需要更多/更少吗?

还有可以在 dropwizard yaml 文件中设置的配置属性吗?或者换句话说,dropwizard 中的连接池是如何管理的?

最佳答案

问题:

MySql 服务器配置了一个超时时间,超时后它会终止连接池中所有空闲的连接。在我的例子中,这是默认值(8 小时)。但是,数据库连接池并不知道池中已终止的连接。因此,当有新请求进入时,会从连接池访问死连接,这会导致“Broken Pipe”异常。

解决方法: 所以要解决这个问题,我们需要摆脱死连接,并让池知道它试图借用的连接是否是死连接。这可以通过在 .yml 配置中设置以下内容来实现。

checkOnReturn: 真

checkWhileIdle: 真

checkOnBorrow: true

关于mysql - 空闲服务器上的 Broken Pipe 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493815/

相关文章:

node.js - 由于 WebSocket 的 Nodejs 中的密度导致的套接字异常

Python文件传输

MySQL 连接和内部选择

php - MySQL 正在将我的网站图标 src 插入到一个表中。为什么?

java - 我需要做什么来纠正我的 WebLogic 通用池连接数据源 JNDI 绑定(bind)错误?

sockets - tcp read() 在 accept() 之后立即

Java Socket 仍然是 Java 中 TCP/IP 编程的首选?

mysql - 如果列值为 NULL,则设置该列值 (MySQL)

java - 桌面应用程序和服务器之间的套接字通信

具有多个客户端的 C++ Winsock 服务器?