2013-04-03 10 views
13

हम वर्तमान में जेटी को विरासत आवेदन माइग्रेट कर रहे हैं। और मुझे किसी टूटे हुए पाइप के बारे में कोई अपवाद है।java.io.IOException: टूटा हुआ पाइप

  • जावा 6
  • जेट्टी 8.1.8
  • वसंत 3.2.0

मैं जेट्टी के लिए एक Glassfish वेब अनुप्रयोग विस्थापित करने के लिए कोशिश कर रहा हूँ। हमारे परीक्षण पर्यावरण में हम लोड बैलेंसर का उपयोग कर रहे हैं और सब कुछ ठीक काम कर रहा है। हमारे ग्राहक बिना किसी समस्या के काम कर रहे हैं।

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

प्रतिक्रिया बढ़ाएं .getBufferSize() बफर आकार प्राप्त करें और बाइट्स के साथ तुलना करें जिसे आप स्थानांतरित करना चाहते हैं!

+2

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपनी पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त [प्रतिष्ठा] (http://stackoverflow.com/help/whats-reputation) हो [किसी भी पोस्ट पर टिप्पणी करने में सक्षम] [http://stackoverflow.com/help/privileges/comment)। –

+0

हैलो, मैं इसका अभ्यास कर रहा हूं, और यह इस प्रश्न के लिए एक पंक्ति का उत्तर है। क्या आर्सी से जवाब आपके लिए कोई मूल्यवान इनपुट प्रदान करता है? क्या आप इसे बदलने के लिए बिंदु जानते हैं? –

+0

जेडीके, या किसी भी प्रकार की वर्तनी में 'बफर आकार()' विधि नहीं है, और 'बाइट्स के साथ [दबफर आकार] की तुलना करें जिसे आप ट्रांसफर करना चाहते हैं' अर्थहीन है। जवाब बकवास है। – EJP

3

मैं @arcy से सहमत हूं, समस्या क्लाइंट पक्ष पर है, मेरे मामले में यह nginx की वजह से है, मुझे विस्तृत करें, मैं nginx को फ्रंटेंड के रूप में उपयोग कर रहा हूं (इसलिए मैं लोड, एसएसएल, इत्यादि वितरित कर सकता हूं ...) और टोमकैट के एप्रोपिएट अनुरोधों को आगे बढ़ाने के लिए proxy_pass http://127.0.0.1:8080 का उपयोग कर।

60 के दशक कि पर्याप्त होना चाहिए की nginx चर proxy_read_timeout लिए एक डिफ़ॉल्ट मान नहीं है, लेकिन कुछ शिखर क्षणों पर अपना सेटअप java.io.IOException साथ त्रुटि होगा: टूटी पाइप मान बदलने जड़ तक मदद मिलेगी कारण (60 एस पर्याप्त होना चाहिए) तय किया जा सकता है।

नोट: इसलिए मैं अपने मामले के साथ थोड़ा और विस्तार कर सकता है मैं एक नया जवाब किए गए मेरे मामले में

संबंधित मुद्दे