We are experiencing a recurring issue in our Quarkus application where Vert.x HTTP client connections are abruptly closed (Connection closed). This causes some requests to fail and makes parts of the application unresponsive.
Steps to reproduce:
"2025-09-09 18:06:28,098 WARN [com.arj.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012121: TransactionReaper::doCancellations worker Thread[#62,Transaction Reaper Worker 0,5,main] successfully canceled TX 0:ffff0af4004b:a695:68bf2b16:727"
"2025-09-09 18:06:28,098 WARN [org.hib.res.tra.bac.jta.int.syn.SynchronizationCallbackCoordinatorTrackingImpl] (Transaction Reaper Worker 0) HHH000451: Transaction afterCompletion called by a background thread; delaying afterCompletion processing until the original thread can handle it. [status=4]"
"2025-09-09 18:06:28,097 FINE [org.pos.jdb.PgConnection] (Transaction Reaper Worker 0) setAutoCommit = true"
"2025-09-09 18:06:28,095 WARN [com.arj.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012108: CheckedAction::check - atomic action 0:ffff0af4004b:a695:68bf2b16:727 aborting with 1 threads active!"
"org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:872)"
"org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:896)"
"java...@21.0.8/java.lang.Thread.run(Thread.java:1583)"
"java...@21.0.8/java.lang.Thread.runWith(Thread.java:1596)"
"io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)"
"org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)"
"org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)"
"org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)"
"org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)"
"org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)"
"org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)"
"io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:638)"
"io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:97)"
"io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:151)"
"io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:84)"
"org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:229)"
"org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:157)"
"org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)"
"org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:154)"
"org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:240)"
"org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:429)"
"org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:70)"
"org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:356)"
"org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:378)"
"org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:415)"
"org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)"
"org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:413)"
"org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:452)"
"org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:560)"
"org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:118)"
"org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:154)"
"java...@21.0.8/java.lang.reflect.Method.invoke(Method.java:580)"
"ma.paymob.resources.ActorResource_Subclass.createLoyaltyActors(Unknown Source)"
"io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)"
"io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)"
"io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)"
"io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)"
"io.quarkus.resteasy.runtime.StandardSecurityCheckInterceptor_PermitAllInterceptor_Bean.intercept(Unknown Source)"
"io.quarkus.resteasy.runtime.StandardSecurityCheckInterceptor.intercept(StandardSecurityCheckInterceptor.java:53)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)"
"io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)"
"io.quarkus.security.runtime.interceptor.PermitAllInterceptor_Bean.intercept(Unknown Source)"
"io.quarkus.security.runtime.interceptor.PermitAllInterceptor.intercept(PermitAllInterceptor.java:23)"
"io.quarkus.security.runtime.interceptor.SecurityHandler.handle(SecurityHandler.java:27)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)"
""io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70)"
""io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)"
""io.quarkus.resteasy.runtime.QuarkusRestPathTemplateInterceptor_Bean.intercept(Unknown Source)"
""io.quarkus.resteasy.runtime.QuarkusRestPathTemplateInterceptor.restMethodInvoke(QuarkusRestPathTemplateInterceptor.java:39)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)"
"ma.paymob.resources.ActorResource_Subclass$$function$$9.apply(Unknown Source)"
"ma.paymob.resources.ActorResource_Subclass.createLoyaltyActors$$superforward(Unknown Source)"
"ma.paymob.resources.ActorResource.createLoyaltyActors(ActorResource.java:237)"
"ma.paymob.services.administration.ActorService_ClientProxy.createLoyaltyActors(Unknown Source)"
"ma.paymob.services.administration.ActorService.createLoyaltyActors(ActorService.java:556)"
"ma.paymob.services.administration.ActorService_Subclass.createLoyaltyActor(Unknown Source)"
"io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)"
"io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)"
"io.quarkus.hibernate.validator.runtime.interceptor.MethodValidationInterceptor_Bean.intercept(Unknown Source)"
"io.quarkus.hibernate.validator.runtime.interceptor.MethodValidationInterceptor.validateMethodInvocation(MethodValidationInterceptor.java:17)"
"io.quarkus.hibernate.validator.runtime.interceptor.AbstractMethodValidationInterceptor.validateMethodInvocation(AbstractMethodValidationInterceptor.java:71)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)"
"io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)"
"ma.paymob.services.administration.ActorService_Subclass$$function$$2.apply(Unknown Source)"
"ma.paymob.services.administration.ActorService_Subclass.createLoyaltyActor$$superforward(Unknown Source)"
"ma.paymob.services.administration.ActorService.createLoyaltyActor(ActorService.java:413)"
"ma.paymob.services.administration.ActorService.createBankWallet(ActorService.java:1279)"
"jdk.proxy4/jdk.proxy4.$Proxy97.createWallet(Unknown Source)"
"io.quarkus.restclient.runtime.QuarkusProxyInvocationHandler.invoke(QuarkusProxyInvocationHandler.java:173)"
"java...@21.0.8/java.lang.reflect.Method.invoke(Method.java:580)"
"jdk.proxy4/jdk.proxy4.$Proxy96.createWallet(Unknown Source)"
"org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:102)"
"org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:103)"
"org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invokeSync(ClientInvoker.java:134)"
"org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:427)"
"org.jboss.resteasy.client.jaxrs.engines.ManualClosingApacheHttpClient43Engine.invoke(ManualClosingApacheHttpClient43Engine.java:348)"
"org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)"
"org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)"
"org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)"
"org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)"
"org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)"
"org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)"
"org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)"
"org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:282)" `
Additional information:
• OpenTelemetry traces for failed requests
• Metrics at the time of incident
Metrics:

The exception is only visible in OpenTelemetry traces.
It is not propagated to the application layer:
No full stacktrace appears in Quarkus logs (only a minimal message).
The exception cannot be caught in the application code (e.g., via try/catch).
This makes it very difficult to determine whether the failure originates from the client side (Vert.x HttpClient, connection pool, timeouts, native mode) or the server side (remote service actively closing the connection).
We also set up Micrometer metrics to investigate potential saturation issues, but so far we haven’t been able to identify the root cause.
I would appreciate any advice or pointers on how to troubleshoot this further and determine whether it’s a client-side or server-side issue. Thanks a lot for your support!
version
Linux Debian 6.1.137-1 (2025-05-07) x86_64 x86_64 x86_64 GNU/Linux
No response
Output of java -version
21
Quarkus version or git rev
3.21.2
Build tool (ie. output of mvnw --version or gradlew --version)
3.9.9
No response
It is not propagated to the application layer:
No full stacktrace appears in Quarkus logs (only a minimal message).
The exception cannot be caught in the application code (e.g., via try/catch).
This makes it very difficult to determine whether the failure originates from the client side (Vert.x HttpClient, connection pool, timeouts, native mode) or the server side (remote service actively closing the connection).
We also set up Micrometer metrics to investigate potential saturation issues, but so far we haven’t been able to identify the root cause.
I would appreciate any advice or pointers on how to troubleshoot this further and determine whether it’s a client-side or server-side issue. Thanks a lot for your support!