From michael.hixson at gmail.com Thu May 28 19:18:28 2015 Content-Type: multipart/mixed; boundary="===============7870260313884532520==" MIME-Version: 1.0 From: Michael Hixson To: undertow-dev at lists.jboss.org Subject: [undertow-dev] http/2 server starts dying after rapid refresh Date: Thu, 28 May 2015 16:18:26 -0700 Message-ID: --===============7870260313884532520== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hello, I'm trying out HTTP/2 with undertow-core in my application, and I see that I'm able to get the server into a bad state pretty reliably by refreshing quickly in my browser. It stops responding to requests and the CPU usage of the Java process starts to climb towards 100%. I was able to replicate this in the HTTP/2 example in the latest from the master branch, by changing the main HttpHandler. This is what I put in Http2Server#main(String[]): Undertow server =3D Undertow.builder() .setServerOption(UndertowOptions.ENABLE_HTTP2, true) .setServerOption(UndertowOptions.ENABLE_SPDY, true) .addHttpListener(8080, bindAddress) .addHttpsListener(8443, bindAddress, sslContext) .setHandler(new HttpHandler() { @Override public void handleRequest(HttpServerExchange exchange) { if (exchange.isInIoThread()) { exchange.dispatch(this); return; } exchange.startBlocking(); exchange.getResponseHeaders().put( new HttpString("Content-Type"), "text/html"); try (BufferedWriter writer =3D new BufferedWriter( new OutputStreamWriter( exchange.getOutputStream(), StandardCharsets.UTF_8))) { writer.append("\n"); for (int i =3D 0; i < 100; i++) { writer.append( "\= n"); } writer.append("hello"); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } }).build(); Then I go to https://localhost:8443/ in a browser and hold down F5 for a bit. I start seeing errors like this: java.nio.channels.ClosedChannelException at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChann= el.write(AbstractFramedStreamSinkChannel.java:396) at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChann= el.writeFinal(AbstractFramedStreamSinkChannel.java:420) at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal(St= reamSinkChannelWrappingConduit.java:66) at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitStr= eamSinkChannel.java:104) at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(Deta= chableStreamSinkChannel.java:195) at io.undertow.server.HttpServerExchange$WriteDispatchChannel.write= Final(HttpServerExchange.java:1882) at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Undertow= OutputStream.java:288) at io.undertow.io.UndertowOutputStream.close(UndertowOutputStream.j= ava:331) at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) at java.io.BufferedWriter.close(BufferedWriter.java:266) at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2Serv= er.java:94) at io.undertow.server.Connectors.executeRootHandler(Connectors.java= :199) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.j= ava:774) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExec= utor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExe= cutor.java:617) at java.lang.Thread.run(Thread.java:745) In case it helps, I saw a different error in my real (not undertow example) application when I started seeing the same effects visibly (site down and CPU climbing to 100%). Maybe it is the same root cause but just being caught/logged differently: ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f failed with an exception java.lang.IllegalStateException: null at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.get= Buffer(AbstractFramedStreamSinkChannel.java:523) ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSenders(= AbstractFramedChannel.java:496) ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abstrac= tFramedChannel.java:581) ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] I see the same behavior in my real application with both undertow-core 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally from source). I only tried the Http2Server example in the latest version though. -Michael --===============7870260313884532520==-- From jason.greene at redhat.com Sat May 30 00:28:16 2015 Content-Type: multipart/mixed; boundary="===============5848403254228022895==" MIME-Version: 1.0 From: Jason T. Greene To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Sat, 30 May 2015 00:28:14 -0400 Message-ID: <4EA9BD5A-06AB-4828-ACF1-C5959EBA75BF@redhat.com> In-Reply-To: CAHqckpPfOO8tVprs9mxm_Bdd5K86wFTU5Ztt29jWfoNG2R-89A@mail.gmail.com --===============5848403254228022895== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Michael, That stack trace seems to show a close() call to the writer in your handler= , but I don't see that call in the code? Note that getting I/o exceptions during write and close calls is normal aft= er a client abnormally terminates. You typically just drop the exception (p= erhaps trace logging). Could you get a jstack output under the scenario where you see high CPU loa= d? > On May 28, 2015, at 6:19 PM, Michael Hixson = wrote: > = > Hello, > = > I'm trying out HTTP/2 with undertow-core in my application, and I see > that I'm able to get the server into a bad state pretty reliably by > refreshing quickly in my browser. It stops responding to requests and > the CPU usage of the Java process starts to climb towards 100%. > = > I was able to replicate this in the HTTP/2 example in the latest from > the master branch, by changing the main HttpHandler. This is what I > put in Http2Server#main(String[]): > = > Undertow server =3D Undertow.builder() > .setServerOption(UndertowOptions.ENABLE_HTTP2, true) > .setServerOption(UndertowOptions.ENABLE_SPDY, true) > .addHttpListener(8080, bindAddress) > .addHttpsListener(8443, bindAddress, sslContext) > .setHandler(new HttpHandler() { > @Override > public void handleRequest(HttpServerExchange exchange) { > if (exchange.isInIoThread()) { > exchange.dispatch(this); > return; > } > exchange.startBlocking(); > exchange.getResponseHeaders().put( > new HttpString("Content-Type"), "text/html"); > try (BufferedWriter writer =3D new BufferedWriter( > new OutputStreamWriter( > exchange.getOutputStream(), > StandardCharsets.UTF_8))) { > writer.append("\n"); > for (int i =3D 0; i < 100; i++) { > writer.append( > "= \n"); > } > writer.append("hello"); > } catch (IOException e) { > e.printStackTrace(); > throw new RuntimeException(e); > } > } > }).build(); > = > Then I go to https://localhost:8443/ in a browser and hold down F5 for > a bit. I start seeing errors like this: > = > java.nio.channels.ClosedChannelException > at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChan= nel.write(AbstractFramedStreamSinkChannel.java:396) > at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) > at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChan= nel.writeFinal(AbstractFramedStreamSinkChannel.java:420) > at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal(S= treamSinkChannelWrappingConduit.java:66) > at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitSt= reamSinkChannel.java:104) > at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(Det= achableStreamSinkChannel.java:195) > at io.undertow.server.HttpServerExchange$WriteDispatchChannel.writ= eFinal(HttpServerExchange.java:1882) > at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Underto= wOutputStream.java:288) > at io.undertow.io.UndertowOutputStream.close(UndertowOutputStream.= java:331) > at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) > at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) > at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) > at java.io.BufferedWriter.close(BufferedWriter.java:266) > at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2Ser= ver.java:94) > at io.undertow.server.Connectors.executeRootHandler(Connectors.jav= a:199) > at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.= java:774) > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExe= cutor.java:1142) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolEx= ecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > = > In case it helps, I saw a different error in my real (not undertow > example) application when I started seeing the same effects visibly > (site down and CPU climbing to 100%). Maybe it is the same root cause > but just being caught/logged differently: > = > ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task > io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f > failed with an exception > java.lang.IllegalStateException: null > at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.ge= tBuffer(AbstractFramedStreamSinkChannel.java:523) > ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSenders= (AbstractFramedChannel.java:496) > ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abstra= ctFramedChannel.java:581) > ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) > ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] > at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) > ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] > = > I see the same behavior in my real application with both undertow-core > 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally > from source). I only tried the Http2Server example in the latest > version though. > = > -Michael > _______________________________________________ > undertow-dev mailing list > undertow-dev(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/undertow-dev --===============5848403254228022895==-- From michael.hixson at gmail.com Sat May 30 01:04:58 2015 Content-Type: multipart/mixed; boundary="===============6703238442596717264==" MIME-Version: 1.0 From: Michael Hixson To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Fri, 29 May 2015 22:04:57 -0700 Message-ID: In-Reply-To: 4EA9BD5A-06AB-4828-ACF1-C5959EBA75BF@redhat.com --===============6703238442596717264== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Jason, I believe the close() call is coming from me declaring the writer in a try-with-resources statement. Here's a jstack from just now, where my CPU is sitting at 96%: https://gist.github.com/michaelhixson/8a6f2ebf4b167fb1b67e -Michael On Fri, May 29, 2015 at 9:28 PM, Jason T. Greene wrote: > Hi Michael, > > That stack trace seems to show a close() call to the writer in your handl= er, but I don't see that call in the code? > > Note that getting I/o exceptions during write and close calls is normal a= fter a client abnormally terminates. You typically just drop the exception = (perhaps trace logging). > > Could you get a jstack output under the scenario where you see high CPU l= oad? > > >> On May 28, 2015, at 6:19 PM, Michael Hixson = wrote: >> >> Hello, >> >> I'm trying out HTTP/2 with undertow-core in my application, and I see >> that I'm able to get the server into a bad state pretty reliably by >> refreshing quickly in my browser. It stops responding to requests and >> the CPU usage of the Java process starts to climb towards 100%. >> >> I was able to replicate this in the HTTP/2 example in the latest from >> the master branch, by changing the main HttpHandler. This is what I >> put in Http2Server#main(String[]): >> >> Undertow server =3D Undertow.builder() >> .setServerOption(UndertowOptions.ENABLE_HTTP2, true) >> .setServerOption(UndertowOptions.ENABLE_SPDY, true) >> .addHttpListener(8080, bindAddress) >> .addHttpsListener(8443, bindAddress, sslContext) >> .setHandler(new HttpHandler() { >> @Override >> public void handleRequest(HttpServerExchange exchange) { >> if (exchange.isInIoThread()) { >> exchange.dispatch(this); >> return; >> } >> exchange.startBlocking(); >> exchange.getResponseHeaders().put( >> new HttpString("Content-Type"), "text/html"); >> try (BufferedWriter writer =3D new BufferedWriter( >> new OutputStreamWriter( >> exchange.getOutputStream(), >> StandardCharsets.UTF_8))) { >> writer.append("\n"); >> for (int i =3D 0; i < 100; i++) { >> writer.append( >> "\n"); >> } >> writer.append("hello"); >> } catch (IOException e) { >> e.printStackTrace(); >> throw new RuntimeException(e); >> } >> } >> }).build(); >> >> Then I go to https://localhost:8443/ in a browser and hold down F5 for >> a bit. I start seeing errors like this: >> >> java.nio.channels.ClosedChannelException >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCha= nnel.write(AbstractFramedStreamSinkChannel.java:396) >> at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCha= nnel.writeFinal(AbstractFramedStreamSinkChannel.java:420) >> at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal(= StreamSinkChannelWrappingConduit.java:66) >> at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitS= treamSinkChannel.java:104) >> at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(De= tachableStreamSinkChannel.java:195) >> at io.undertow.server.HttpServerExchange$WriteDispatchChannel.wri= teFinal(HttpServerExchange.java:1882) >> at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Undert= owOutputStream.java:288) >> at io.undertow.io.UndertowOutputStream.close(UndertowOutputStream= .java:331) >> at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) >> at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) >> at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) >> at java.io.BufferedWriter.close(BufferedWriter.java:266) >> at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2Se= rver.java:94) >> at io.undertow.server.Connectors.executeRootHandler(Connectors.ja= va:199) >> at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange= .java:774) >> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolEx= ecutor.java:1142) >> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolE= xecutor.java:617) >> at java.lang.Thread.run(Thread.java:745) >> >> In case it helps, I saw a different error in my real (not undertow >> example) application when I started seeing the same effects visibly >> (site down and CPU climbing to 100%). Maybe it is the same root cause >> but just being caught/logged differently: >> >> ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task >> io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f >> failed with an exception >> java.lang.IllegalStateException: null >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.g= etBuffer(AbstractFramedStreamSinkChannel.java:523) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSender= s(AbstractFramedChannel.java:496) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abstr= actFramedChannel.java:581) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) >> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >> at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) >> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >> >> I see the same behavior in my real application with both undertow-core >> 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally >> from source). I only tried the Http2Server example in the latest >> version though. >> >> -Michael >> _______________________________________________ >> undertow-dev mailing list >> undertow-dev(a)lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/undertow-dev --===============6703238442596717264==-- From michael.hixson at gmail.com Sat May 30 01:05:00 2015 Content-Type: multipart/mixed; boundary="===============1189190949324915978==" MIME-Version: 1.0 From: Michael Hixson To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Fri, 29 May 2015 22:04:58 -0700 Message-ID: In-Reply-To: 4EA9BD5A-06AB-4828-ACF1-C5959EBA75BF@redhat.com --===============1189190949324915978== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Jason, I believe the close() call is coming from me declaring the writer in a try-with-resources statement. Here's a jstack from just now, where my CPU is sitting at 96%: https://gist.github.com/michaelhixson/8a6f2ebf4b167fb1b67e -Michael On Fri, May 29, 2015 at 9:28 PM, Jason T. Greene wrote: > Hi Michael, > > That stack trace seems to show a close() call to the writer in your handl= er, but I don't see that call in the code? > > Note that getting I/o exceptions during write and close calls is normal a= fter a client abnormally terminates. You typically just drop the exception = (perhaps trace logging). > > Could you get a jstack output under the scenario where you see high CPU l= oad? > > >> On May 28, 2015, at 6:19 PM, Michael Hixson = wrote: >> >> Hello, >> >> I'm trying out HTTP/2 with undertow-core in my application, and I see >> that I'm able to get the server into a bad state pretty reliably by >> refreshing quickly in my browser. It stops responding to requests and >> the CPU usage of the Java process starts to climb towards 100%. >> >> I was able to replicate this in the HTTP/2 example in the latest from >> the master branch, by changing the main HttpHandler. This is what I >> put in Http2Server#main(String[]): >> >> Undertow server =3D Undertow.builder() >> .setServerOption(UndertowOptions.ENABLE_HTTP2, true) >> .setServerOption(UndertowOptions.ENABLE_SPDY, true) >> .addHttpListener(8080, bindAddress) >> .addHttpsListener(8443, bindAddress, sslContext) >> .setHandler(new HttpHandler() { >> @Override >> public void handleRequest(HttpServerExchange exchange) { >> if (exchange.isInIoThread()) { >> exchange.dispatch(this); >> return; >> } >> exchange.startBlocking(); >> exchange.getResponseHeaders().put( >> new HttpString("Content-Type"), "text/html"); >> try (BufferedWriter writer =3D new BufferedWriter( >> new OutputStreamWriter( >> exchange.getOutputStream(), >> StandardCharsets.UTF_8))) { >> writer.append("\n"); >> for (int i =3D 0; i < 100; i++) { >> writer.append( >> "\n"); >> } >> writer.append("hello"); >> } catch (IOException e) { >> e.printStackTrace(); >> throw new RuntimeException(e); >> } >> } >> }).build(); >> >> Then I go to https://localhost:8443/ in a browser and hold down F5 for >> a bit. I start seeing errors like this: >> >> java.nio.channels.ClosedChannelException >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCha= nnel.write(AbstractFramedStreamSinkChannel.java:396) >> at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCha= nnel.writeFinal(AbstractFramedStreamSinkChannel.java:420) >> at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal(= StreamSinkChannelWrappingConduit.java:66) >> at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitS= treamSinkChannel.java:104) >> at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(De= tachableStreamSinkChannel.java:195) >> at io.undertow.server.HttpServerExchange$WriteDispatchChannel.wri= teFinal(HttpServerExchange.java:1882) >> at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Undert= owOutputStream.java:288) >> at io.undertow.io.UndertowOutputStream.close(UndertowOutputStream= .java:331) >> at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) >> at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) >> at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) >> at java.io.BufferedWriter.close(BufferedWriter.java:266) >> at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2Se= rver.java:94) >> at io.undertow.server.Connectors.executeRootHandler(Connectors.ja= va:199) >> at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange= .java:774) >> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolEx= ecutor.java:1142) >> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolE= xecutor.java:617) >> at java.lang.Thread.run(Thread.java:745) >> >> In case it helps, I saw a different error in my real (not undertow >> example) application when I started seeing the same effects visibly >> (site down and CPU climbing to 100%). Maybe it is the same root cause >> but just being caught/logged differently: >> >> ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task >> io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f >> failed with an exception >> java.lang.IllegalStateException: null >> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.g= etBuffer(AbstractFramedStreamSinkChannel.java:523) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSender= s(AbstractFramedChannel.java:496) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abstr= actFramedChannel.java:581) >> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) >> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >> at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) >> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >> >> I see the same behavior in my real application with both undertow-core >> 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally >> from source). I only tried the Http2Server example in the latest >> version though. >> >> -Michael >> _______________________________________________ >> undertow-dev mailing list >> undertow-dev(a)lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/undertow-dev --===============1189190949324915978==-- From michael.hixson at gmail.com Sat May 30 01:26:03 2015 Content-Type: multipart/mixed; boundary="===============8334162374689257768==" MIME-Version: 1.0 From: Michael Hixson To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Fri, 29 May 2015 22:26:02 -0700 Message-ID: In-Reply-To: CAHqckpOS_Ng4P=MRbLZenCGnNg9TmAx4=vbd=aCBfcYpDK4Q1g@mail.gmail.com --===============8334162374689257768== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Also here is a jmap -histo from a little later: https://gist.github.com/michaelhixson/de6ede25fdb79a4f25b4 (apologies in advance if gmail sends this email twice like my last one) -Michael On Fri, May 29, 2015 at 10:04 PM, Michael Hixson wrote: > Hi Jason, > > I believe the close() call is coming from me declaring the writer in a > try-with-resources statement. > > Here's a jstack from just now, where my CPU is sitting at 96%: > https://gist.github.com/michaelhixson/8a6f2ebf4b167fb1b67e > > -Michael > > On Fri, May 29, 2015 at 9:28 PM, Jason T. Greene > wrote: >> Hi Michael, >> >> That stack trace seems to show a close() call to the writer in your hand= ler, but I don't see that call in the code? >> >> Note that getting I/o exceptions during write and close calls is normal = after a client abnormally terminates. You typically just drop the exception= (perhaps trace logging). >> >> Could you get a jstack output under the scenario where you see high CPU = load? >> >> >>> On May 28, 2015, at 6:19 PM, Michael Hixson wrote: >>> >>> Hello, >>> >>> I'm trying out HTTP/2 with undertow-core in my application, and I see >>> that I'm able to get the server into a bad state pretty reliably by >>> refreshing quickly in my browser. It stops responding to requests and >>> the CPU usage of the Java process starts to climb towards 100%. >>> >>> I was able to replicate this in the HTTP/2 example in the latest from >>> the master branch, by changing the main HttpHandler. This is what I >>> put in Http2Server#main(String[]): >>> >>> Undertow server =3D Undertow.builder() >>> .setServerOption(UndertowOptions.ENABLE_HTTP2, true) >>> .setServerOption(UndertowOptions.ENABLE_SPDY, true) >>> .addHttpListener(8080, bindAddress) >>> .addHttpsListener(8443, bindAddress, sslContext) >>> .setHandler(new HttpHandler() { >>> @Override >>> public void handleRequest(HttpServerExchange exchange) { >>> if (exchange.isInIoThread()) { >>> exchange.dispatch(this); >>> return; >>> } >>> exchange.startBlocking(); >>> exchange.getResponseHeaders().put( >>> new HttpString("Content-Type"), "text/html"); >>> try (BufferedWriter writer =3D new BufferedWriter( >>> new OutputStreamWriter( >>> exchange.getOutputStream(), >>> StandardCharsets.UTF_8))) { >>> writer.append("\n"); >>> for (int i =3D 0; i < 100; i++) { >>> writer.append( >>> ">> } >>> writer.append("hello"); >>> } catch (IOException e) { >>> e.printStackTrace(); >>> throw new RuntimeException(e); >>> } >>> } >>> }).build(); >>> >>> Then I go to https://localhost:8443/ in a browser and hold down F5 for >>> a bit. I start seeing errors like this: >>> >>> java.nio.channels.ClosedChannelException >>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCh= annel.write(AbstractFramedStreamSinkChannel.java:396) >>> at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) >>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkCh= annel.writeFinal(AbstractFramedStreamSinkChannel.java:420) >>> at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal= (StreamSinkChannelWrappingConduit.java:66) >>> at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(Conduit= StreamSinkChannel.java:104) >>> at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(D= etachableStreamSinkChannel.java:195) >>> at io.undertow.server.HttpServerExchange$WriteDispatchChannel.wr= iteFinal(HttpServerExchange.java:1882) >>> at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Under= towOutputStream.java:288) >>> at io.undertow.io.UndertowOutputStream.close(UndertowOutputStrea= m.java:331) >>> at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) >>> at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) >>> at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) >>> at java.io.BufferedWriter.close(BufferedWriter.java:266) >>> at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2S= erver.java:94) >>> at io.undertow.server.Connectors.executeRootHandler(Connectors.j= ava:199) >>> at io.undertow.server.HttpServerExchange$1.run(HttpServerExchang= e.java:774) >>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE= xecutor.java:1142) >>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool= Executor.java:617) >>> at java.lang.Thread.run(Thread.java:745) >>> >>> In case it helps, I saw a different error in my real (not undertow >>> example) application when I started seeing the same effects visibly >>> (site down and CPU climbing to 100%). Maybe it is the same root cause >>> but just being caught/logged differently: >>> >>> ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task >>> io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f >>> failed with an exception >>> java.lang.IllegalStateException: null >>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.= getBuffer(AbstractFramedStreamSinkChannel.java:523) >>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>> at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSende= rs(AbstractFramedChannel.java:496) >>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>> at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abst= ractFramedChannel.java:581) >>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) >>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >>> at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) >>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >>> >>> I see the same behavior in my real application with both undertow-core >>> 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally >>> from source). I only tried the Http2Server example in the latest >>> version though. >>> >>> -Michael >>> _______________________________________________ >>> undertow-dev mailing list >>> undertow-dev(a)lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/undertow-dev --===============8334162374689257768==-- From michael.hixson at gmail.com Tue Jun 2 19:13:26 2015 Content-Type: multipart/mixed; boundary="===============6019381359233358173==" MIME-Version: 1.0 From: Michael Hixson To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Tue, 02 Jun 2015 16:13:24 -0700 Message-ID: In-Reply-To: CAHqckpMDijbTZmqwi8VB8NrhqEeDy3BTWXxs+13Q9nKQG_VPxg@mail.gmail.com --===============6019381359233358173== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Was this Jira issue 461? I'm seeing promising results with this commit, while if I revert the commit I run into the issue again. https://github.com/undertow-io/undertow/commit/8f8e1658c5aface7f65a351e985d= 40c386a3f99b If so, thanks! -Michael On Fri, May 29, 2015 at 10:26 PM, Michael Hixson wrote: > Also here is a jmap -histo from a little later: > https://gist.github.com/michaelhixson/de6ede25fdb79a4f25b4 > > (apologies in advance if gmail sends this email twice like my last one) > > -Michael > > On Fri, May 29, 2015 at 10:04 PM, Michael Hixson > wrote: >> Hi Jason, >> >> I believe the close() call is coming from me declaring the writer in a >> try-with-resources statement. >> >> Here's a jstack from just now, where my CPU is sitting at 96%: >> https://gist.github.com/michaelhixson/8a6f2ebf4b167fb1b67e >> >> -Michael >> >> On Fri, May 29, 2015 at 9:28 PM, Jason T. Greene >> wrote: >>> Hi Michael, >>> >>> That stack trace seems to show a close() call to the writer in your han= dler, but I don't see that call in the code? >>> >>> Note that getting I/o exceptions during write and close calls is normal= after a client abnormally terminates. You typically just drop the exceptio= n (perhaps trace logging). >>> >>> Could you get a jstack output under the scenario where you see high CPU= load? >>> >>> >>>> On May 28, 2015, at 6:19 PM, Michael Hixson wrote: >>>> >>>> Hello, >>>> >>>> I'm trying out HTTP/2 with undertow-core in my application, and I see >>>> that I'm able to get the server into a bad state pretty reliably by >>>> refreshing quickly in my browser. It stops responding to requests and >>>> the CPU usage of the Java process starts to climb towards 100%. >>>> >>>> I was able to replicate this in the HTTP/2 example in the latest from >>>> the master branch, by changing the main HttpHandler. This is what I >>>> put in Http2Server#main(String[]): >>>> >>>> Undertow server =3D Undertow.builder() >>>> .setServerOption(UndertowOptions.ENABLE_HTTP2, true) >>>> .setServerOption(UndertowOptions.ENABLE_SPDY, true) >>>> .addHttpListener(8080, bindAddress) >>>> .addHttpsListener(8443, bindAddress, sslContext) >>>> .setHandler(new HttpHandler() { >>>> @Override >>>> public void handleRequest(HttpServerExchange exchange) { >>>> if (exchange.isInIoThread()) { >>>> exchange.dispatch(this); >>>> return; >>>> } >>>> exchange.startBlocking(); >>>> exchange.getResponseHeaders().put( >>>> new HttpString("Content-Type"), "text/html"); >>>> try (BufferedWriter writer =3D new BufferedWriter( >>>> new OutputStreamWriter( >>>> exchange.getOutputStream(), >>>> StandardCharsets.UTF_8))) { >>>> writer.append("\n"); >>>> for (int i =3D 0; i < 100; i++) { >>>> writer.append( >>>> "\n"); >>>> } >>>> writer.append("hello"); >>>> } catch (IOException e) { >>>> e.printStackTrace(); >>>> throw new RuntimeException(e); >>>> } >>>> } >>>> }).build(); >>>> >>>> Then I go to https://localhost:8443/ in a browser and hold down F5 for >>>> a bit. I start seeing errors like this: >>>> >>>> java.nio.channels.ClosedChannelException >>>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkC= hannel.write(AbstractFramedStreamSinkChannel.java:396) >>>> at org.xnio.channels.Channels.writeFinalBasic(Channels.java:961) >>>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkC= hannel.writeFinal(AbstractFramedStreamSinkChannel.java:420) >>>> at org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFina= l(StreamSinkChannelWrappingConduit.java:66) >>>> at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(Condui= tStreamSinkChannel.java:104) >>>> at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(= DetachableStreamSinkChannel.java:195) >>>> at io.undertow.server.HttpServerExchange$WriteDispatchChannel.w= riteFinal(HttpServerExchange.java:1882) >>>> at io.undertow.io.UndertowOutputStream.writeBufferBlocking(Unde= rtowOutputStream.java:288) >>>> at io.undertow.io.UndertowOutputStream.close(UndertowOutputStre= am.java:331) >>>> at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) >>>> at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) >>>> at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) >>>> at java.io.BufferedWriter.close(BufferedWriter.java:266) >>>> at io.undertow.examples.http2.Http2Server$1.handleRequest(Http2= Server.java:94) >>>> at io.undertow.server.Connectors.executeRootHandler(Connectors.= java:199) >>>> at io.undertow.server.HttpServerExchange$1.run(HttpServerExchan= ge.java:774) >>>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool= Executor.java:1142) >>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo= lExecutor.java:617) >>>> at java.lang.Thread.run(Thread.java:745) >>>> >>>> In case it helps, I saw a different error in my real (not undertow >>>> example) application when I started seeing the same effects visibly >>>> (site down and CPU climbing to 100%). Maybe it is the same root cause >>>> but just being caught/logged differently: >>>> >>>> ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task >>>> io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f >>>> failed with an exception >>>> java.lang.IllegalStateException: null >>>> at io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel= .getBuffer(AbstractFramedStreamSinkChannel.java:523) >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>>> at io.undertow.server.protocol.framed.AbstractFramedChannel.flushSend= ers(AbstractFramedChannel.java:496) >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>>> at io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abs= tractFramedChannel.java:581) >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] >>>> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) >>>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >>>> at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) >>>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] >>>> >>>> I see the same behavior in my real application with both undertow-core >>>> 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally >>>> from source). I only tried the Http2Server example in the latest >>>> version though. >>>> >>>> -Michael >>>> _______________________________________________ >>>> undertow-dev mailing list >>>> undertow-dev(a)lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/undertow-dev --===============6019381359233358173==-- From sdouglas at redhat.com Wed Jun 3 03:36:32 2015 Content-Type: multipart/mixed; boundary="===============4083774116997731299==" MIME-Version: 1.0 From: Stuart Douglas To: undertow-dev at lists.jboss.org Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh Date: Wed, 03 Jun 2015 03:36:28 -0400 Message-ID: <679006218.11400496.1433316988107.JavaMail.zimbra@redhat.com> In-Reply-To: CAHqckpO_+OPz+XJumsChjZrg3r+ABKw0CMfAH6VfvBRAHFTOyA@mail.gmail.com --===============4083774116997731299== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable https://github.com/undertow-io/undertow/commit/4cd914008fc7fddca97af5300523= b96bba81d895 Is the one. Stuart ----- Original Message ----- > From: "Michael Hixson" > To: undertow-dev(a)lists.jboss.org > Sent: Wednesday, 3 June, 2015 1:13:24 AM > Subject: Re: [undertow-dev] http/2 server starts dying after rapid refresh > = > Was this Jira issue 461? I'm seeing promising results with this > commit, while if I revert the commit I run into the issue again. > https://github.com/undertow-io/undertow/commit/8f8e1658c5aface7f65a351e98= 5d40c386a3f99b > = > If so, thanks! > = > -Michael > = > On Fri, May 29, 2015 at 10:26 PM, Michael Hixson > wrote: > > Also here is a jmap -histo from a little later: > > https://gist.github.com/michaelhixson/de6ede25fdb79a4f25b4 > > > > (apologies in advance if gmail sends this email twice like my last one) > > > > -Michael > > > > On Fri, May 29, 2015 at 10:04 PM, Michael Hixson > > wrote: > >> Hi Jason, > >> > >> I believe the close() call is coming from me declaring the writer in a > >> try-with-resources statement. > >> > >> Here's a jstack from just now, where my CPU is sitting at 96%: > >> https://gist.github.com/michaelhixson/8a6f2ebf4b167fb1b67e > >> > >> -Michael > >> > >> On Fri, May 29, 2015 at 9:28 PM, Jason T. Greene > >> wrote: > >>> Hi Michael, > >>> > >>> That stack trace seems to show a close() call to the writer in your > >>> handler, but I don't see that call in the code? > >>> > >>> Note that getting I/o exceptions during write and close calls is norm= al > >>> after a client abnormally terminates. You typically just drop the > >>> exception (perhaps trace logging). > >>> > >>> Could you get a jstack output under the scenario where you see high C= PU > >>> load? > >>> > >>> > >>>> On May 28, 2015, at 6:19 PM, Michael Hixson > >>>> wrote: > >>>> > >>>> Hello, > >>>> > >>>> I'm trying out HTTP/2 with undertow-core in my application, and I see > >>>> that I'm able to get the server into a bad state pretty reliably by > >>>> refreshing quickly in my browser. It stops responding to requests a= nd > >>>> the CPU usage of the Java process starts to climb towards 100%. > >>>> > >>>> I was able to replicate this in the HTTP/2 example in the latest from > >>>> the master branch, by changing the main HttpHandler. This is what I > >>>> put in Http2Server#main(String[]): > >>>> > >>>> Undertow server =3D Undertow.builder() > >>>> .setServerOption(UndertowOptions.ENABLE_HTTP2, true) > >>>> .setServerOption(UndertowOptions.ENABLE_SPDY, true) > >>>> .addHttpListener(8080, bindAddress) > >>>> .addHttpsListener(8443, bindAddress, sslContext) > >>>> .setHandler(new HttpHandler() { > >>>> @Override > >>>> public void handleRequest(HttpServerExchange exchange) { > >>>> if (exchange.isInIoThread()) { > >>>> exchange.dispatch(this); > >>>> return; > >>>> } > >>>> exchange.startBlocking(); > >>>> exchange.getResponseHeaders().put( > >>>> new HttpString("Content-Type"), "text/html"); > >>>> try (BufferedWriter writer =3D new BufferedWriter( > >>>> new OutputStreamWriter( > >>>> exchange.getOutputStream(), > >>>> StandardCharsets.UTF_8))) { > >>>> writer.append("\n"); > >>>> for (int i =3D 0; i < 100; i++) { > >>>> writer.append( > >>>> " >>>> ".css\">\n"); > >>>> } > >>>> writer.append("hello"); > >>>> } catch (IOException e) { > >>>> e.printStackTrace(); > >>>> throw new RuntimeException(e); > >>>> } > >>>> } > >>>> }).build(); > >>>> > >>>> Then I go to https://localhost:8443/ in a browser and hold down F5 f= or > >>>> a bit. I start seeing errors like this: > >>>> > >>>> java.nio.channels.ClosedChannelException > >>>> at > >>>> io.undertow.server.protocol.framed.AbstractFramedStreamSinkCh= annel.write(AbstractFramedStreamSinkChannel.java:396) > >>>> at org.xnio.channels.Channels.writeFinalBasic(Channels.java:9= 61) > >>>> at > >>>> io.undertow.server.protocol.framed.AbstractFramedStreamSinkCh= annel.writeFinal(AbstractFramedStreamSinkChannel.java:420) > >>>> at > >>>> org.xnio.conduits.StreamSinkChannelWrappingConduit.writeFinal= (StreamSinkChannelWrappingConduit.java:66) > >>>> at > >>>> org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(Conduit= StreamSinkChannel.java:104) > >>>> at > >>>> io.undertow.channels.DetachableStreamSinkChannel.writeFinal(D= etachableStreamSinkChannel.java:195) > >>>> at > >>>> io.undertow.server.HttpServerExchange$WriteDispatchChannel.wr= iteFinal(HttpServerExchange.java:1882) > >>>> at > >>>> io.undertow.io.UndertowOutputStream.writeBufferBlocking(Under= towOutputStream.java:288) > >>>> at > >>>> io.undertow.io.UndertowOutputStream.close(UndertowOutputStrea= m.java:331) > >>>> at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320) > >>>> at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) > >>>> at java.io.OutputStreamWriter.close(OutputStreamWriter.java:2= 33) > >>>> at java.io.BufferedWriter.close(BufferedWriter.java:266) > >>>> at > >>>> io.undertow.examples.http2.Http2Server$1.handleRequest(Http2S= erver.java:94) > >>>> at > >>>> io.undertow.server.Connectors.executeRootHandler(Connectors.j= ava:199) > >>>> at > >>>> io.undertow.server.HttpServerExchange$1.run(HttpServerExchang= e.java:774) > >>>> at > >>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE= xecutor.java:1142) > >>>> at > >>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool= Executor.java:617) > >>>> at java.lang.Thread.run(Thread.java:745) > >>>> > >>>> In case it helps, I saw a different error in my real (not undertow > >>>> example) application when I started seeing the same effects visibly > >>>> (site down and CPU climbing to 100%). Maybe it is the same root cau= se > >>>> but just being caught/logged differently: > >>>> > >>>> ERROR [2015-05-28 14:23:59,804] org.xnio.nio: XNIO000011: Task > >>>> io.undertow.server.protocol.framed.AbstractFramedChannel$2(a)308b5f1f > >>>> failed with an exception > >>>> java.lang.IllegalStateException: null > >>>> at > >>>> io.undertow.server.protocol.framed.AbstractFramedStreamSinkChannel.= getBuffer(AbstractFramedStreamSinkChannel.java:523) > >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > >>>> at > >>>> io.undertow.server.protocol.framed.AbstractFramedChannel.flushSende= rs(AbstractFramedChannel.java:496) > >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > >>>> at > >>>> io.undertow.server.protocol.framed.AbstractFramedChannel$2.run(Abst= ractFramedChannel.java:581) > >>>> ~[undertow-core-1.3.0.Beta1-SNAPSHOT.jar:1.3.0.Beta1-SNAPSHOT] > >>>> at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:560) > >>>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] > >>>> at org.xnio.nio.WorkerThread.run(WorkerThread.java:462) > >>>> ~[xnio-nio-3.3.1.Final.jar:3.3.1.Final] > >>>> > >>>> I see the same behavior in my real application with both undertow-co= re > >>>> 1.2.6.Final and 1.3.0.Beta1-SNAPSHOT (the latter installed locally > >>>> from source). I only tried the Http2Server example in the latest > >>>> version though. > >>>> > >>>> -Michael > >>>> _______________________________________________ > >>>> undertow-dev mailing list > >>>> undertow-dev(a)lists.jboss.org > >>>> https://lists.jboss.org/mailman/listinfo/undertow-dev > _______________________________________________ > undertow-dev mailing list > undertow-dev(a)lists.jboss.org > https://lists.jboss.org/mailman/listinfo/undertow-dev >=20 --===============4083774116997731299==--