提交响应的错误java.io.IOException:sun.nio.ch.FileDispatcher.write0(本机方法)中的管道损坏

时间:2009-03-13 10:16:41

标签: java ssl

我在一些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 at   sun.nio.ch.IOUtil.write(IOUtil.java:75)at   sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)at at   com.sun.enterprise.server.ss.ASOutputStream.write(ASOutputStream.java:120)at at   com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:283)at at   com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:272)at at   com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:666)at at   com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)at   org.apache.coyote.http11.InternalOutputBuffer.commit(InternalOutputBuffer.java:602)at at   com.sun.enterprise.web.connector.grizzly.ProcessorTask.action(ProcessorTask.java:721)at at   org.apache.coyote.Response.action(Response.java:188)at   org.apache.coyote.Response.sendHeaders(Response.java:380)at   org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:357)at at   org.apache.coyote.tomcat5.OutputBuffer.close(OutputBuffer.java:318)at at   org.apache.coyote.tomcat5.CoyoteResponse.finishResponse(CoyoteResponse.java:528)at at   org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:192)at at   com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess(ProcessorTask.java:604)at at   com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475)at at   com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:426)at at   com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281)at at   com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83

3 个答案:

答案 0 :(得分:4)

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

这是Java Web应用程序中有时会出现的标准烦人错误。您在请求URL时遇到此错误,然后在浏览器中点击停止或点击其他网址。该应用程序抱怨它无法向您发送完整的回复。

答案 1 :(得分:1)

就我而言,当我在服务器上生成 Excel 或 csv 文件以供本地下载时发生这种情况(在 HttpServletResponse getOutputStream().flush() 处崩溃) 然而,它与浏览器配置有关,在我的情况下,Windows 7 上的 Chrome 32 位。服务器端没有。 三天来,我深入调查了我的 Web 应用程序,寻找问题的原因,检查了许多 apache 库等。 然后我尝试在另一台计算机上执行相同的操作,最后使用 FireFox 执行相同的操作。没问题。 最后我发现原因是 Chrome 的默认缓存大小。 我用 -disk-cache-size-2147483648(在快捷方式目标的末尾)更改了它,问题就消失了。 我希望它可以为某人节省时间。

答案 2 :(得分:-1)

Java NIO Pipe是两个线程之间的单向数据连接。管道具有源通道和接收器通道。您将数据写入接收器通道。然后可以从源通道读取此数据。

现在出现问题。每当接收器通道为FULL(读取速度不足以在缓冲区中留下一些空间)时,管道就会关闭! 因此,在此之后发生的任何写入都将失败。