提交响应 java.io.IOException 时出错:sun.nio.ch.FileDispatcher.write0(Native Method) 处的管道损坏

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/642061/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 13:10:49  来源:igfitidea点击:

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

javassl

提问by Marcus Leon

I encounter this error after a number of https requests. Anyone have any idea what could be the reason? It seens to be related to SSL. But previously it was working fine. I really don't understand what could have caused this issue

我在多次 https 请求后遇到此错误。任何人都知道可能是什么原因?它似乎与 SSL 有关。但以前它工作正常。我真的不明白是什么导致了这个问题

Error commiting responsejava.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: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) at com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:283) at com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:272) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:666) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) at org.apache.coyote.http11.InternalOutputBuffer.commit(InternalOutputBuffer.java:602) at com.sun.enterprise.web.connector.grizzly.ProcessorTask.action(ProcessorTask.java:721) 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 org.apache.coyote.tomcat5.OutputBuffer.close(OutputBuffer.java:318) at org.apache.coyote.tomcat5.CoyoteResponse.finishResponse(CoyoteResponse.java:528) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:192) at 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) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281) at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83

提交 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 .sendHeaders(Response.java:380) at org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:357) at org.apache.coyote.tomcat5.OutputBuffer.close(OutputBuffer.java:318) at org。 apache.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) 在 com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475) 在 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)

回答by Marcus Leon

I don't know about sun.nio.ch. but...

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

This is a standard annoying error you get sometimes in Java web apps. You get this error when requesting a URL and then either hitting stop in your browser or clicking away to another url. The app is complaining that it wasn't able to send you the complete response.

这是您在 Java Web 应用程序中有时会遇到的标准烦人错误。请求 URL 时会出现此错误,然后在浏览器中单击停止或单击另一个 URL。该应用程序抱怨无法向您发送完整的响应。

回答by brownfox

A Java NIO Pipe is a one-way data connection between two threads. A Pipe has a source channel and a sink channel. You write data to the sink channel. This data can then be read from the source channel.

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

Now coming to the problem. Whenever sink channel is FULL (reads are NOT fast enough to leave some space in the buffer ), pipe is closed!! So any writes coming after this point will fail.

现在问题来了。每当接收器通道已满(读取速度不够快,无法在缓冲区中留下一些空间)时,管道将关闭!!因此,在此之后的任何写入都将失败。