diff --git a/memberships/src/main/java/com/salesforce/apollo/archipelago/LocalServer.java b/memberships/src/main/java/com/salesforce/apollo/archipelago/LocalServer.java
index 74403835d..1f28baf49 100644
--- a/memberships/src/main/java/com/salesforce/apollo/archipelago/LocalServer.java
+++ b/memberships/src/main/java/com/salesforce/apollo/archipelago/LocalServer.java
@@ -79,6 +79,9 @@ public RouterImpl router(ServerConnectionCache.Builder cacheBuilder, Supplier
serverBuilder = InProcessServerBuilder.forName(name)
.executor(Executors.newVirtualThreadPerTaskExecutor())
+ .scheduledExecutorService(
+ Executors.newScheduledThreadPool(100, Thread.ofVirtual()
+ .factory()))
.intercept(ConcurrencyLimitServerInterceptor.newBuilder(
limitsBuilder.build())
.statusSupplier(
@@ -102,6 +105,7 @@ private ManagedChannel connectTo(Member to) {
final var name = String.format(NAME_TEMPLATE, prefix, qb64(to.getId()));
final InProcessChannelBuilder builder = InProcessChannelBuilder.forName(name)
.executor(executor)
+ .offloadExecutor(executor)
.usePlaintext()
.intercept(clientInterceptor);
disableTrash(builder);
diff --git a/memberships/src/main/java/com/salesforce/apollo/archipelago/MtlsClient.java b/memberships/src/main/java/com/salesforce/apollo/archipelago/MtlsClient.java
index 58db9ec8e..2ee89f441 100644
--- a/memberships/src/main/java/com/salesforce/apollo/archipelago/MtlsClient.java
+++ b/memberships/src/main/java/com/salesforce/apollo/archipelago/MtlsClient.java
@@ -34,6 +34,7 @@ public MtlsClient(SocketAddress address, ClientAuth clientAuth, String alias, Cl
Limiter limiter = new GrpcClientLimiterBuilder().blockOnLimit(false).build();
channel = NettyChannelBuilder.forAddress(address)
.executor(executor)
+ .offloadExecutor(executor)
.withOption(ChannelOption.TCP_NODELAY, true)
.sslContext(supplier.forClient(clientAuth, alias, validator, MtlsServer.TL_SV1_3))
.intercept(new ConcurrencyLimitClientInterceptor(limiter,
diff --git a/pom.xml b/pom.xml
index 1f96bee62..4aadc61cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -784,6 +784,7 @@
${forks}
true
+ -Djdk.tracePinnedThreads=full