CloseNowException。此流不可写

问题描述 投票:0回答:1

我真的很疑惑。在我的服务器日志中,我看到。

org.apache.coyote.CloseNowException: Connection [215], Stream [95], This stream is not writable
        at org.apache.coyote.http2.Http2UpgradeHandler.reserveWindowSize(Http2UpgradeHandler.java:843) ~[tomcat-coyote.jar:9.0.30]
        at org.apache.coyote.http2.Stream$StreamOutputBuffer.flush(Stream.java:940) ~[tomcat-coyote.jar:9.0.30]
        at org.apache.coyote.http2.Stream$StreamOutputBuffer.doWrite(Stream.java:859) ~[tomcat-coyote.jar:9.0.30]
        at org.apache.coyote.http2.Http2OutputBuffer.doWrite(Http2OutputBuffer.java:59) ~[tomcat-coyote.jar:9.0.30]
        at org.apache.coyote.Response.doWrite(Response.java:601) ~[tomcat-coyote.jar:9.0.30]

这似乎是发生在用户点击太快的时候 但这没有意义 因为Tomcat应该可以提供大量的请求。这是在一台负载很轻的服务器上,在一台非常快的机器上,每秒可能有2或3个HTTP请求。

这是在Spring Boot 2和Tomcat 9.0.30的情况下发生的。这真的很让人困惑。

我确实在SO上看到了一个类似的问题,有人用web推送得到了这个结果,但我们没有。

下面是我们HTTP2连接器的配置情况。

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true"
           keystoreFile="/etc/ssl/keys.p12"
           keystorePass="changeit"
           keyAlias="tomcat"
           sslProtocol="TLS"
           sslEnabledProtocols="TLSv1.3,TLSv1.2"
           connectionTimeout="20000"
           >
  <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"
                   keepAliveTimeout="20000"
                   />
</Connector>

在Ubuntu 18.04服务器上运行的是JDK 13.0.2版本。

对此有什么想法吗?这肯定是用户注意到的,我也不知道怎么解决这个问题。

tomcat http2
1个回答
0
投票

我也遇到过同样的问题。对我来说,解决方案是为升级协议设置readTimeout="20000"。

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"
        readTimeout="20000" />

但不能保证它对你有效;-)

© www.soinside.com 2019 - 2024. All rights reserved.