簡體   English   中英

提交響應 java.io.IOException 時出錯:sun.nio.ch.FileDispatcher.write0(Native Method) 處的管道損壞

[英]Error commiting response java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcher.write0(Native Method)

我在多次 https 請求后遇到此錯誤。 任何人都知道可能是什么原因? 它似乎與 SSL 有關。 但以前它工作正常。 我真的不明白是什么導致了這個問題

提交 responsejava.io.IOException 時出錯:sun.nio.ch.FileDispatcher.write0(Native Method) at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29) at sun.nio.ch.IOUtil 處的管道損壞。 writeFromNativeBuffer(IOUtil.java:104) at sun.nio.ch.IOUtil.write(IOUtil.java:75) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302) at com.sun.enterprise.server .ss.ASOutputStream.write(ASOutputStream.java:120) 在 com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:283) 在 com.sun.net.ssl.internal.ssl.OutputRecord .write(OutputRecord.java:272) 在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:666) 在 com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream .java:59) 在 org.apache.coyote.http11.InternalOutputBuffer.commit(InternalOutputBuffer.java:602) 在 com.sun.enterprise.web.connector.grizzly.ProcessorTask.action(ProcessorTask.java:721) 在 org。 apache.coyote.Response.action(Response.java:188) 在 org.apache.coyote.Response.sendH 在 org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:357) 在 org.apache.coyote.tomcat5.OutputBuffer.close(OutputBuffer.java:318) 在 org.apache 的 eaders(Response.java:380) .coyote.tomcat5.CoyoteResponse.finishResponse(CoyoteResponse.java:528) 在 org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:192) 在 com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess (ProcessorTask.java:604) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java :426) 在 com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281) 在 com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83)

我不知道 sun.nio.ch。 但...

這是您在 Java Web 應用程序中有時會遇到的標准煩人錯誤。 當您請求一個 URL,然后在瀏覽器中點擊停止或點擊另一個 URL 時,您會收到此錯誤。 該應用程序抱怨無法向您發送完整的響應。

在我的情況下,當我在服務器上生成 Excel 或 csv 文件以供本地下載時發生這種情況(在 HttpServletResponse getOutputStream().flush() 處崩潰)但是它與瀏覽器配置有關,在我的情況下,Windows 7 上的 Chrome 32 位. 服務器端什么都沒有。 三天來,我深入調查了我的 Web 應用程序,尋找問題的原因,檢查了許多 apache 庫等。然后我嘗試從另一台計算機執行相同的操作,最后使用 FireFox 執行相同的操作。 沒問題。 最后我發現原因是 Chrome 的默認緩存大小。 我用 -disk-cache-size-2147483648(在快捷方式目標的末尾)更改了它,問題就消失了。 我希望它可以為某人節省時間。

Java NIO 管道是兩個線程之間的單向數據連接。 一個管道有一個源通道和一個接收通道。 您將數據寫入接收器通道。 然后可以從源通道讀取該數據。

現在問題來了。 每當接收器通道已滿(讀取速度不夠快,無法在緩沖區中留下一些空間)時,管道將關閉! 因此,在此之后的任何寫入都將失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM