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