警告: 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,只輸出錯誤級別的信息。 |