【问题标题】:Payara-Server - Write timeout exceeded when trying to flush the dataPayara-Server - 尝试刷新数据时超出写入超时
【发布时间】:2017-08-29 17:15:06
【问题描述】:

在部署的 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)

【问题讨论】:

    标签: jakarta-ee jersey payara


    【解决方案1】:

    当写一条响应的时间过长时会发生此异常,可能是由于网络问题。并不是说写整个响应太费时间了,而是在某些情况下写一段响应恰好太长,导致异常。

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

    【讨论】:

    • 不幸的是 Payara 5 不接受负值!
    • 在 Payara 5 中,您可以将其设置为 0 以禁用超时。
    • 更精确;配置 > 服务器配置 > 网络配置 > 传输 > TCP > 写入超时
    【解决方案2】:

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

    我只能推测使用 POST 时出现问题的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多