空闲服务器上的 Broken Pipe 异常

Broken Pipe exception on idle server

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

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

问题:

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

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

checkOnReturn: true

checkWhileIdle: 真

checkOnBorrow: true