空闲服务器上的Broken Pipe异常

时间:2015-04-07 14:18:48

标签: 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中管理连接池?

1 个答案:

答案 0 :(得分:4)

问题:

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

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

checkOnReturn:true

checkWhileIdle:true

checkOnBorrow:true