java.net.SocketException: Connection reset by peer: socket write error

ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:
358 )
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:
434 )
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:
293 )
at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:
399 )
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:
77 )
at com.vm.video.dao.VideoDao.downLoadVideo(VideoDao.java:
806 )
…… Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:
737 )
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:
434 ) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java: 349 )
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:
761 )
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:
126 )
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:
570 )
at org.apache.coyote.Response.doWrite(Response.java:
560 ) at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java: 353 )
...
27 more
解決方案一 ClientAbortException: java.net.SocketException: Connection reset by
peer: socket write
error的原因是由於處理http連接時,正在輸出內容時,用戶關閉了IE,會出現一個"ClientAbortException",屬於I/O處理
中出現的一個異常,應用服務器應該會捕捉。
Connection reset by peer的原因: 經常出現的Connection reset by peer: 原因可能是多方面的,不過更常見的原因是:
①:服務器的併發連接數超過了其承載量,服務器會將其中一些連接Down掉; ②:客戶關掉了瀏覽器,而服務器還在給客戶端發送數據; ③:瀏覽器端按了Stop 很多人都說是客戶端造成的,沒有辦法控制,是個比較鬱悶的問題。
解決方案二 以前也曾經遇到過ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的問題,但是造成這個錯誤的各種原因不一樣。
第一步,爲了找出出錯的原因,我在幾臺機器上測試,結果,終於在有一臺機器上運行會出現那樣的問題。
第二步,爲了找出真正出錯的代碼,我將所有在jsp頁面用到的處理數據代碼刪掉,結果運行正常,不再報那個錯,這個說明問題應該在jsp頁面。 第三步,由於我在jsp頁面中直接用一個類通過spring和hibernate查詢得到結果,沒有用到struts.因此,我修改代碼,將所有查 詢放到一個action裏面,然後再用request.setAttribute()保存查詢結果。再jsp頁面直接用 request.getAttribute取得結果。這樣,再次運行,第一次頁面顯示正常,並且後臺也不報錯。於是我認爲,問題已經解決。 但是,運行幾次以後,打開幾個新的同一個頁面後,後臺又開始報同樣的錯誤了,暈~~~~ 第四步, 爲了確定問題的根源在哪裏,我修改了VO,添加了implements Serializable,實現了Serializable接口。結果運行,這次是第一次運行後臺就報 第五步,我打開所有調試信息,結果發現每次action執行結束後,我都會用decorator,就 是用裝時器裝飾一下頁面,於是開始想,會不會是action執行結束後,再運行 "裝飾器" 的那個過濾程序,結果造成session過期,從而導致那個問題。於是嘗試不用裝飾器去裝飾那個頁面。第一次運行正常。爲了測試是否問題真正解決,我新開 了10個ie窗口,在各個頁面輪流刷新頁面,在刷新了 100 多下後,發現後臺還沒有報錯,初步確定問題已經解決!

但是,造成這個問題的內在原因還是不清楚!






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章