繁体   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