> -----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.write( > GzipOutputFilter.java:159) > > at > java.base/java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream. > java:252) > > at > java.base/java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.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(OutputBuffer.ja > va:340) > > at > org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.j > ava:783) > > at > org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuffer.ja > va:453) > > at > org.apache.catalina.connector.OutputBuffer.flushCharBuffer(OutputBuffer.j > ava:788) > > at > org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:727) > > at > org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:505) > > at > org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:148) > > 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.java:112 > ) > > at > org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:160) > > at > org.apache.jsp.WEB_002dINF.jsp.businessrelations.ticket_005frelations_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. Thanks! Thomas > > > } > > > > The generated java file from the jsp file only catches IOException: > > ... > > if (!(t instanceof jakarta.servlet.jsp.SkipPageException)){ > > out = _jspx_out; > > if (out != null && out.getBufferSize() != 0) > > try { > > if (response.isCommitted()) { > > out.flush(); > > } else { > > out.clearBuffer(); > > } > > } catch (java.io.IOException e) {} > > if (_jspx_page_context != null) > _jspx_page_context.handlePageException(t); > > else throw new ServletException(t); > > } > > > > It seems like the browser is sometimes closing the stream and this causes > Tomcat to write exceptions in the localhost-logfile. > > > > Is there any way to prevent this? > > It is strange, that it didn’t happen with Tomcat 9 or maybe a Firefox-Update > is causing the issue(?) Access-log shows Firefox 97. > > > > Greetings, Thomas > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org