Chris, I did set -Djdk.tracePinnedThreads=full and found there were a few pinned threads:
Thread[#43,ForkJoinPool-1-worker-4,5,CarrierThreads] java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:185) java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:393) java.base/java.lang.VirtualThread.parkNanos(VirtualThread.java:631) java.base/java.lang.System$2.parkVirtualThread(System.java:2648) java.base/jdk.internal.misc.VirtualThreads.park(VirtualThreads.java:67) java.base/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:408) … com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) … com.mysql.cj.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:2005) <== monitors:1 com.zaxxer.hikari.pool.ProxyConnection.setAutoCommit(ProxyConnection.java:401) com.zaxxer.hikari.pool.HikariProxyConnection.setAutoCommit(HikariProxyConnection.java) … Over the 12 test runs I have performed, I found a 53% decrease in throughput when using virtual threads: http://ec2-18-188-185-212.us-east-2.compute.amazonaws.com:8080/web-report/ My example code is located here: https://github.com/wcrowell/rest-mysql-app/ The JMX test I used is located here: https://github.com/wcrowell/rest-mysql-app/blob/main/virtual-thread-test.jmx This test makes a POST request to save a record to MySQL: http://ec2-18-117-196-158.us-east-2.compute.amazonaws.com:8080/vt/save Regards, William Crowell This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.