java.net.SocketException: Broken pipe 错误原因

警告: Error sending end packet
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 org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:531)
        at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:121)
        at org.apache.jk.core.MsgContext.action(MsgContext.java:301)
        at org.apache.coyote.Response.action(Response.java:183)
        at org.apache.coyote.Response.finish(Response.java:305)
        at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:276)
        at org.apache.catalina.connector.Response.finishResponse(Response.java:486)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:287)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:619)

环境是Linux+tomcat,最近出现了这样的问题,之前没有遇到过。偶尔出现,自己在线上环境自测使用都没有遇到,在网上找了一下,搜集了一些资料,备用:

一位网友的解释如下:

抛出java.net.SocketException: Broken pipe的异常就是说客户端关闭了连接,可能是客户端运行的程序结束了,或者是客户强行中断了连接,原因很多,但不是我们乙方的问题,是你们甲方出的乱子。

要禁止后台打印错误,打开catalina.sh,找到
elif [ "$1" = "start" ] ; then
再往下找到
org.apache.catalina.startup.Bootstrap "$@" start 
加上2>/dev/null,错误信息输出到空设备。

另一种做法就是把conf/logging.properties文件里的FINE,INFO全替换成SEVERE,只输出错误级别的信息。
 

猜你喜欢

转载自juliana-only.iteye.com/blog/1442620