You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2023/06/09 17:59:19 UTC

[Bug 66508] Tomcat after a GC pause causes the HTTP threads to be blocked to acquire a semaphore to process WebSockets connection closure.

https://bz.apache.org/bugzilla/show_bug.cgi?id=66508

--- Comment #21 from Venkata Manda <mv...@gmail.com> ---
Excuse me for the delayed response.

I tested the fix by simulating the GC pause by pausing the JVM (running in
debug mode) and it worked. 

My team is working on running this at a higher load with actual user loads to
confirm that we are not seeing any other side effects/issues. I was waiting for
those results before confirming the fix is working without any issues.

Recently I got to know about
https://bz.apache.org/bugzilla/show_bug.cgi?id=66574
and the creator of the bug stated that this seems to be a regression introduced
in 9.0.74. 

In the past, after upgrading CometD from 3 to 5 with Tomcat version 9.0.63 we
noticed all the HTTP-nio2 threads blocked without making progress. We raised
the issue with CometD https://github.com/cometd/cometd/issues/1328
and Tomcat https://bz.apache.org/bugzilla/show_bug.cgi?id=66531.

We fixed it on our side by not using CompletableFuture in
org.cometd.server.websocket.javax.WebSocketEndPoint.onMessage method. This has
been done to unblock ourselves. 

We are not sure whether 9.0.75 change is needed as we no longer use
CompletableFuture in WebSocketEndPoint. Any guidance on this is highly
appreciated.

Once again sorry for the delayed response. We were waiting to run this at a
higher load with different scenarios to make sure there is no other issues.


Thank you once again for all the help.



-----------------------------------------
Stack trace for https://bz.apache.org/bugzilla/show_bug.cgi?id=66531

"http-nio2-8082-exec-1" #82 daemon prio=5 os_prio=31 cpu=460.02ms
elapsed=2578.35s tid=0x00007facbee28800 nid=0xde03 waiting on condition 
[0x000070001173d000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.17/Native Method)
        - parking to wait for  <0x00000007b5100478> (a
java.util.concurrent.CompletableFuture$Signaller)
        at
java.util.concurrent.locks.LockSupport.park(java.base@11.0.17/LockSupport.java:194)
        at
java.util.concurrent.CompletableFuture$Signaller.block(java.base@11.0.17/CompletableFuture.java:1796)
        at
java.util.concurrent.ForkJoinPool.managedBlock(java.base@11.0.17/ForkJoinPool.java:3128)
        at
java.util.concurrent.CompletableFuture.waitingGet(java.base@11.0.17/CompletableFuture.java:1823)
        at
java.util.concurrent.CompletableFuture.get(java.base@11.0.17/CompletableFuture.java:1998)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint.onMessage(WebSocketEndPoint.java:61)
        at
org.cometd.server.websocket.javax.WebSocketEndPoint.onMessage(WebSocketEndPoint.java:35)
        at
org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415)
        at
org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:129)
        at
org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515)
        at
org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301)
        at
org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
        at
org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85)
        at
org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:183)
        at
org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:162)
        at
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157)
        at
org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
        at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59)
        at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
        at
org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1701)
        at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        - locked <0x00000007b51005d8> (a
org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper)
        at
org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1190)
        at
org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.completed(Nio2Endpoint.java:633)
        at
org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.completed(Nio2Endpoint.java:611)
        at
sun.nio.ch.Invoker.invokeUnchecked(java.base@11.0.17/Invoker.java:127)
        at sun.nio.ch.Invoker$2.run(java.base@11.0.17/Invoker.java:219)
        at
sun.nio.ch.AsynchronousChannelGroupImpl$1.run(java.base@11.0.17/AsynchronousChannelGroupImpl.java:112)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(java.base@11.0.17/Thread.java:829)

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org