java.net.SocketException:管道损坏

Ben*_*nni 9 java mysql tomcat hibernate jdbc

我每天都会收到此错误或我的jsp页面:

java.net.SocketException
Run Code Online (Sandbox Code Playgroud)

消息:管道破裂

堆栈跟踪:

java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)
        ....
Run Code Online (Sandbox Code Playgroud)

重新启动tomcat服务后,它工作正常.(我使用hibernate连接到mysql数据库)

Pas*_*ent 17

我每天都会收到此错误或我的JSP页面(...)

我会推测一下,但如果每天早上都发生这种情况(即在一夜不活动之后),那么它可能与MySQL默认情况下8小时后关闭空闲连接的事实有关wait_timeout.

如果是这种情况,请:

  • 配置tomcat以使用validationQuery数据源配置中的a来测试借用连接:

    <parameter>
      <name>validationQuery</name>
      <value>select 1</value>
    </parameter>
    
    Run Code Online (Sandbox Code Playgroud)
  • 增加MySQL的wait_timeout通过my.cnf/my.ini,或通过连接命令行SQL客户端并输入SET GLOBAL wait_timeout=86400,或其他一些合适的秒数.

我不知道第二个选项的所有后果,并没有真正推荐它,至少没有得到MySQL专家的更多反馈.


And*_*s_D 2

看起来您(部分)失去了与数据库的连接。MySQL 尝试发送某些内容,但连接丢失。

另一个报告类似问题的 mysql/tomcat 用户被建议使用连接池,例如c3p0。用户回答说他想首先使用Mysql/tomcat连接池,如mysql参考手册中所述。

这是原始帖子(德语)