2013-04-03 464 views
13

我們正在將遺留應用程序遷移到Jetty。我有一個關於破管的例外。java.io.IOException:斷開的管道

  • 的Java 6
  • 碼頭8.1.8
  • 春3.2.0

我試圖遷移Glassfish的Web應用程序碼頭。在我們的測試環境中,我們使用負載均衡器,一切正常。我們的客戶工作沒有任何問題。

WARN [2013-04-03 13:34:28,963] com.myapp.bbb.config.MvcDefaultConfig$1: Handler execution resulted in exception 
! org.eclipse.jetty.io.EofException: null 
! at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:914) 
! at org.eclipse.jetty.http.HttpGenerator.complete(HttpGenerator.java:798) 
! at org.eclipse.jetty.server.AbstractHttpConnection.completeResponse(AbstractHttpConnection.java:642) 
! at org.eclipse.jetty.server.Response.complete(Response.java:1234) 
! at org.eclipse.jetty.server.Response.sendError(Response.java:404) 
! at org.eclipse.jetty.server.Response.sendError(Response.java:416) 
! at org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:1111) 
! at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:898) 
! at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
! at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
! at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) 
! at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
! at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) 
! at com.magnetdigital.maggy.dropwizard.head2get.Head2GetFilter.doFilter(Head2GetFilter.java:22) 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) 
! at com.yammer.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) 
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) 
! at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) 
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) 
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) 
! at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) 
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
! at com.yammer.metrics.jetty.InstrumentedHandler.handle(InstrumentedHandler.java:200) 
! at org.eclipse.jetty.server.handler.GzipHandler.handle(GzipHandler.java:275) 
! at com.yammer.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:123) 
! at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
! at org.eclipse.jetty.server.Server.handle(Server.java:365) 
! at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) 
! at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) 
! at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) 
! at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) 
! at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) 
! at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
! at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) 
! at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298) 
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
! at java.lang.Thread.run(Thread.java:662) 
Caused by: ! java.io.IOException: Broken pipe 
! at sun.nio.ch.FileDispatcher.write0(Native Method) 
! at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29) 
! at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:69) 
! at sun.nio.ch.IOUtil.write(IOUtil.java:26) 
! at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334) 
! at org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:293) 
! at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.flush(BlockingChannelConnector.java:253) 
! at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:850) 
!... 44 common frames omitted 

當我檢查堆棧跟蹤時,我發現這個異常總是由404請求觸發的。

org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:1111)

  • 爲什麼我在這個異常?
  • 如何在本地機器上重現此異常?
+0

在我的情況下,它happended當我設置彈出加載從我的後端超時自動關閉,並關閉之前加載彈出 – shareef

回答

16

我對「破管」最常見的原因是,一臺機器(通過套接字進行通信的一對機器)在通信完成之前關閉了套接字的末端。其中大約一半是因爲在該套接字上通信的程序已終止。

如果發送字節的程序將它們發送出去並立即關閉套接字或自行終止,則在傳輸和讀取字節之前,套接字可能會停止工作。

嘗試在你關閉套接字的任何地方暫停,然後讓程序終止以查看是否有幫助。

供參考:「管道」和「套接字」是有時互換使用的術語。

+0

我幾乎知道創建這個異常的請求,但我不能成功地創建一個類似的。你有什麼想法通過捲曲或別的東西來產生一個破損的管道嗎? – Cemo

+0

如果你認爲你知道創建異常的請求,爲什麼你不能嘗試我建議的而不是嘗試創建另一個代碼? – arcy

+4

rcook是正確的,看起來客戶端完全沒有打擾完成響應之前退出...您可以經常得到這個時,用戶導航離開頁面完成加載前 –

-1

增加response.getBufferSize() 獲取緩衝區大小並與要傳輸的字節進行比較!

+2

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

你好,我正在練習這個,這是這個問題的單行答案。 arcy的回答是否爲你提供了寶貴的意見?你知道改變它的意義嗎? –

+0

JDK中沒有'bufferSize()'方法,或者任何變體拼寫,'比較[緩衝區大小]和要傳輸的字節'是沒有意義的。答案是無稽之談。 – EJP

3

我同意@arcy,問題出在客戶端,我的情況是因爲nginx,讓我詳細說明 我使用nginx作爲前端(所以我可以分發負載,ssl等... )並使用proxy_pass http://127.0.0.1:8080將相應的請求轉發給tomcat。

有60秒應該是足夠的nginx的變量proxy_read_timeout一個默認值,但在某些高峯時刻,我的設置將與java.io.IOException的錯誤:改變值中斷的管道將有助於直到根原因(60s應該夠了)可以修復。

注:我做了一個新的答案,所以我可以拓展更多的與我的情況下(這是我發現的有關上網本的錯誤找了很多之後,只有提起)

相關問題