> -----Ursprüngliche Nachricht-----
> Von: Konstantin Kolinko <knst.koli...@gmail.com>
> Gesendet: Donnerstag, 10. März 2022 16:31
> An: Tomcat Users List <users@tomcat.apache.org>
> Betreff: Re: Many IllegalStateException when using http2 protocol
> 
> чт, 10 мар. 2022 г. в 18:16, Thomas Hoffmann (Speed4Trade GmbH)
> <thomas.hoffm...@speed4trade.com.invalid>:
> >
> > > -----Ursprüngliche Nachricht-----
> > > Von: Konstantin Kolinko <knst.koli...@gmail.com>
> > > Gesendet: Mittwoch, 9. März 2022 00:52
> > > An: Tomcat Users List <users@tomcat.apache.org>
> > > Betreff: Re: Many IllegalStateException when using http2 protocol
> > >
> > > пн, 7 мар. 2022 г. в 16:26, Thomas Hoffmann (Speed4Trade GmbH)
> > > <thomas.hoffm...@speed4trade.com.invalid>:
> > > >
> > > > Hello,
> > > >
> > > > Since upgrading from Tomcat 9.0.56 to Tomcat 10.0.16, the
> > > > localhost-logfile
> > > is filling up with stacks of the form:
> > > >
> > > > 07-Mar-2022 07:24:01.780 SCHWERWIEGEND
> > > > [https-openssl-nio-443-exec-
> > > 21] org.apache.catalina.core.ApplicationDispatcher.invoke
> > > Servlet.service() for servlet [jsp] threw exception
> > > >         java.lang.IllegalStateException: Connection [66], Stream
> > > > [113], Unable
> > > to write to stream once it has been closed
> > > >                 at
> > >
> org.apache.coyote.http2.Stream$StreamOutputBuffer.doWrite(Stream.java:
> > > 843)
> > > >                 at
> > > org.apache.coyote.http11.filters.GzipOutputFilter$FakeOutputStream.w
> > > rite(
> > > GzipOutputFilter.java:159)
> > > >                 at
> > >
> java.base/java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.
> > > java:252)
> > > >                 at
> > > java.base/java.util.zip.DeflaterOutputStream.write(DeflaterOutputStr
> > > eam.ja
> > > va:210)
> > > >                 at
> > > java.base/java.util.zip.GZIPOutputStream.write(GZIPOutputStream.java
> > > :148
> > > )
> > > >                 at
> > >
> org.apache.coyote.http11.filters.GzipOutputFilter.doWrite(GzipOutputFilter.
> > > java:69)
> > > >                 at
> > >
> org.apache.coyote.http2.Http2OutputBuffer.doWrite(Http2OutputBuffer.
> > > jav
> > > a:59)
> > > >                 at org.apache.coyote.Response.doWrite(Response.java:625)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuff
> > > er.ja
> > > va:340)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuf
> > > fer.j
> > > ava:783)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuff
> > > er.ja
> > > va:453)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.flushCharBuffer(OutputBuf
> > > fer.j
> > > ava:788)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:
> > > 727)
> > > >                 at
> > > org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:5
> > > 05)
> > > >                 at
> > > org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:1
> > > 48)
> > > >                 at
> > >
> org.apache.catalina.filters.ExpiresFilter$XPrintWriter.write(ExpiresFilter.java:
> > > 850)
> > > >                 at
> > > org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:275
> > > )
> > > >                 at 
> > > > java.base/java.io.PrintWriter.write(PrintWriter.java:506)
> > > >                 at
> > > org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:275
> > > )
> > > >                 at 
> > > > java.base/java.io.PrintWriter.write(PrintWriter.java:506)
> > > >                 at
> > > org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.ja
> > > va:112
> > > )
> > > >                 at
> > > org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:160
> > > )
> > > >                 at
> > > org.apache.jsp.WEB_002dINF.jsp.businessrelations.ticket_005frelation
> > > s_inc_
> > > jsp._jspService(ticket_005frelations_inc_jsp.java:702)
> > > >                 ...
> > > >
> > > > The jsp-file varies between the stacktraces, so it is not related
> > > > to a certain
> > > jsp-File.
> > > > The stream.java looks like (which didn’t change from Tomcat 9 to 10):
> > > >         @Override
> > > >         public final synchronized int doWrite(ByteBuffer chunk)
> > > > throws
> > > IOException {
> > > >             if (closed) {
> > > >                 throw new IllegalStateException(
> > > >                         sm.getString("stream.closed",
> > > > getConnectionId(), getIdAsString()));
> > >
> > > I wonder why it throws an ISE here, instead of a proper IOException
> > > as declared by this method.
> > > (It looks like a bug, but I have not investigated the history of
> > > this code yet.)
> > >
> > > There is nothing suspicious in the stacktrace. An unusual bit of
> > > configuration here is having enabled a GzipOutputFilter.
> > >
> > > Best regards,
> > > Konstantin Kolinko
> >
> > Good observation about the GZip-Filter!
> > We are using compression="force" in our connector.
> > I modified some http2 settings (raised some limits) and set
> compression="off" ... up to now, the error disappeared.
> > As I modified several settings, I will carefully revert the changes step by
> step to figure out which connector parameter is causing this error.
> > Maybe the GZip-Filter doesn’t work well with the http2 protocol in tomcat.
> > I will investigate and post the results.
> 
> Mark has already changed that IllegalStateException to an IOException, and
> that is included into  10.0.18 that has already been tagged and is currently
> being voted for an official release.
> 
> You may take part in the testing. See VOTE thread on the dev mailing list for
> links.
> 
> Best regards,
> Konstantin Kolinko

Hm... some users reported blank pages from time to time which seem to correlate 
with the error in the logfile. After hitting F5 the page appeared.
So I am not sure if changing the Exception-Type finally solves the issue.

Reply via email to