CloseNowException: этот поток недоступен для записи - PullRequest
0 голосов
/ 04 февраля 2020

Я действительно в тупике. В журналах моего сервера я вижу:

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, где кто-то получил это с помощью веб-пу sh, но это не так.

Вот как выглядит наш коннектор HTTP / 2 настроено:

<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>

Он работает на JDK 13.0.2 на сервере Ubuntu 18.04.

Есть идеи по этому поводу? Это определенно то, что пользователи замечают, и я понятия не имею, как это решить.

...