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,只輸出錯誤級別的信息。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章