我正在使用 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/