我真的很疑惑。在我的服务器日志中,我看到。
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版本。
对此有什么想法吗?这肯定是用户注意到的,我也不知道怎么解决这个问题。
我也遇到过同样的问题。对我来说,解决方案是为升级协议设置readTimeout="20000"。
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"
readTimeout="20000" />
但不能保证它对你有效;-)