大きなファイル(約50 MB)をアップロードしているときに、org.Eclipse.jetty.io.EofException:Early EOF例外。私のjettyサーバーのバージョンは「9.2.9.v20150224」です。以下はスタックトレースです
org.Eclipse.jetty.io.EofException: Early EOF
at org.Eclipse.jetty.server.HttpInput$3.noContent(HttpInput.Java:505) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
at org.Eclipse.jetty.server.HttpInput.read(HttpInput.Java:124) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
at org.Apache.http.entity.InputStreamEntity.writeTo(InputStreamEntity.Java:142) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.Java:96) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.Java:112) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.Java:117) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.Java:265) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.Java:231) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.Java:237) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.Java:122) ~[httpcore-4.4.1.jar:4.4.1]
at org.Apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.Java:685) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:487) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.Java:882) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:117) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:55) ~[httpclient-4.5.jar:4.5]
at org.Apache.http.client.HttpClient$execute$2.call(Unknown Source) ~[na:na]
org.Eclipse.jetty.io.EofException
at org.Eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.Java:192)
at org.Eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.Java:408)
at org.Eclipse.jetty.io.WriteFlusher.write(WriteFlusher.Java:302)
at org.Eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.Java:129)
at org.Eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.Java:676)
at org.Eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.Java:246)
at org.Eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.Java:208)
at org.Eclipse.jetty.server.HttpConnection.send(HttpConnection.Java:471)
at org.Eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.Java:763)
at org.Eclipse.jetty.server.HttpChannel.write(HttpChannel.Java:801)
at org.Eclipse.jetty.server.HttpOutput.write(HttpOutput.Java:142)
at org.Eclipse.jetty.server.HttpOutput.write(HttpOutput.Java:135)
at org.Eclipse.jetty.server.HttpOutput.flush(HttpOutput.Java:237)
at Java_io_Flushable$flush.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.Java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.Java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.Java:112)
at SendResponseFilter.writeResponse(SendResponse.groovy:128)
at SendResponseFilter$writeResponse.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.Java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.Java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.Java:145)
at SendResponseFilter.writeResponse(SendResponse.groovy:102)
at SendResponseFilter.run(SendResponse.groovy:59)
at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.Java:112)
at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.Java:197)
at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.Java:161)
at com.netflix.zuul.FilterProcessor.postRoute(FilterProcessor.Java:92)
at com.netflix.zuul.ZuulRunner.postRoute(ZuulRunner.Java:87)
at com.netflix.zuul.http.ZuulServlet.postRoute(ZuulServlet.Java:107)
at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.Java:88)
at realdoc.spider.SpiderServlet.service(SpiderServlet.Java:66)
at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:808)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1669)
at com.netflix.zuul.context.ContextLifecycleFilter.doFilter(ContextLifecycleFilter.Java:40)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
at org.Eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.Java:259)
at org.Eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.Java:222)
at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1652)
at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:585)
at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:143)
at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:577)
at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:223)
at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1127)
at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:515)
at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:185)
at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:1061)
at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:141)
at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:97)
at org.Eclipse.jetty.server.Server.handle(Server.Java:497)
at org.Eclipse.jetty.server.HttpChannel.handle(HttpChannel.Java:310)
at org.Eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.Java:257)
at org.Eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.Java:540)
at org.Eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.Java:635)
at org.Eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.Java:555)
at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.io.IOException: Broken pipe
at Sun.nio.ch.FileDispatcherImpl.writev0(Native Method)
at Sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.Java:51)
at Sun.nio.ch.IOUtil.write(IOUtil.Java:148)
at Sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.Java:504)
at org.Eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.Java:172)
... 55 more
誰かがこの問題について何か考えを持っているなら、助けてください。
これらのスタックトレースは、接続終了の結果を表示するだけで、終了した理由は表示しません。
_Java.io.IOException: Broken pipe
_は、OSレベルで予期せず接続が終了したことを意味します。
org.Eclipse.jetty.io.ChannelEndPoint.flush()
中の_org.Eclipse.jetty.io.EofException
_は、接続が終了したため、応答本文のコンテンツがネットワークへのフラッシュを完了できなかったことを意味します。
org.Eclipse.jetty.server.HttpInput.read()
中の_org.Eclipse.jetty.io.EofException: Early EOF
_は、Connection(この場合は_Java.nio.channels.SocketChannel
_)からアクティブにRequest(その本体コンテンツまたはスタックトレースからのヘッダーが不明)を読み取り中に、途中で終了したことを意味します、および完全なHTTPリクエストが受信されませんでした(ヘッダーと本文コンテンツ)。
クライアントまたはサーバーからのログに、何が起こっているかを示す他のエラーがある可能性があります。
その要求を他のツール(curlなど)でテストして、クライアント、ネットワーク、またはJettyを確認できます。また、wiresharkなどのツールを使用して、ネットワークトラフィックをキャプチャし、接続の終了元(クライアントまたはサーバー)を確認できます
私が問題で見つけたのは、httpヘッダーの「Content-Length」がxxxのようなものになっていたことです。インターネットwifiが原因で、コンテンツ全体が読み取られる前(xxx未満)、ストリームが閉じられ、上記の例外がスローされます。
もう1つの問題はタイムアウトの問題です。ストリーム全体が(大きなファイルとして)読み取られる前に、タイムアウトのために、ストリームは早まって閉じられ、上記のように例外がスローされます。
他の理由もありますが、これらの問題に直面しました。