Quarkus Vert.x connection closed issue

31 views
Skip to first unread message

amine ghallab

unread,
Sep 12, 2025, 1:12:11 PMSep 12
to Quarkus Development mailing list

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:

  1. Start the Quarkus application in native mode.
  2. Execute HTTP requests to target.
  3. Observe the connection abruptly closing after some time or under load
"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
487444112-c528b37c-01b5-4a2f-9579-8e8da99ab1fa.png (1876×798)

Metrics:

487437564-82d26814-f8fb-4891-99d9-3b5cf31c7da2.png (945×517)

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!

clement escoffier

unread,
Sep 16, 2025, 10:09:23 AM (11 days ago) Sep 16
to quark...@googlegroups.com
Hello, 

Did you create an issue? And if so, did you attach a simple reproducer? 

Clement

--
You received this message because you are subscribed to the Google Groups "Quarkus Development mailing list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to quarkus-dev...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/quarkus-dev/1d2e8130-12ca-4c44-a152-f4cfe2ecb6b5n%40googlegroups.com.

Georgios Andrianakis

unread,
Sep 16, 2025, 10:10:50 AM (11 days ago) Sep 16
to quark...@googlegroups.com
Just to clarify things, this question seems to be about the Quarkus RESTEasy Client

Reply all
Reply to author
Forward
0 new messages