5

在部署的 JavaEE 应用程序中请求不同的 Web 服务(Jersey 2.23.1)时,我从 Payara Server 4.1.1.164 收到此异常。

我不知道异常的原因,也不知道它究竟是什么时候出现的,因为在某些具有相同 payara 服务器配置的测试环境中它会出现,但在其他环境中从未出现过。

有人可以帮我解决这里的问题吗?任何帮助将不胜感激。

[2017-03-22T17:20:03.200+0100] [Payara 4.1] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=28 _ThreadName=http-thread-pool::http-listener-1(3)] [timeMillis: 1490199603200] [levelValue: 900] [[
  StandardWrapperValve[Alexia-BE]: Servlet.service() for servlet Alexia-BE threw exception
java.io.IOException: Write timeout exceeded when trying to flush the data
    at org.glassfish.grizzly.http.io.OutputBuffer.blockAfterWriteIfNeeded(OutputBuffer.java:1004)
    at org.glassfish.grizzly.http.io.OutputBuffer.write(OutputBuffer.java:715)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:355)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:342)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:161)
    at com.sun.jersey.spi.container.servlet.WebComponent$Writer.write(WebComponent.java:307)
    at com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.write(ContainerResponse.java:135)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
    at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
    at java.io.BufferedWriter.write(BufferedWriter.java:230)
    at java.io.Writer.write(Writer.java:157)
    at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:190)
    at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128)
    at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88)
    at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58)
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:302)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
4

2 回答 2

4

当写一条响应的时间过长时会发生此异常,可能是由于网络问题。这并不意味着问题在于编写整个响应需要太多时间,而是在某些情况下编写一个响应恰好太长,从而导致异常。

您可以尝试增加 TCP 传输写入超时(在管理控制台中,转到网络 → 传输 → TCP 并修改写入超时)。或通过将值设置为 -1 来禁用它。

于 2017-05-01T11:18:05.617 回答
1

当错误地@POST在端点上使用注释而不是@GET. 端点在大多数开发人员机器上运行良好,但在一台开发人员机器上失败,最后在生产中失败。替换@POST@GET我们解决了问题。

我只能推测使用 POST 时导致问题发生的原因。

于 2017-09-11T10:18:09.430 回答