8000 Vert.x thread slow / stuck · Issue #40225 · keycloak/keycloak · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Vert.x thread slow / stuck #40225
Open
Open
@pnowy

Description

@pnowy

Before reporting an issue

  • I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them.

Area

operator

Describe the bug

Hi, after recent update from version 26.0.7 to 26.2.4 (tried also 26.2.5) the operator started failing when keycloak manifest change.

The logs from operator:

keycloak-logs.txt

Root cause:

1749020241203	2025-06-04 06:57:21,098 WARN  [io.ver.cor.imp.BlockedThreadChecker] (vertx-blocked-thread-checker) Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2599 ms, time limit is 2000 ms: io.vertx.core.VertxException: Thread blocked
1749020241098
1749020241098		at java.base/java.lang.Thread.run(Thread.java:1583)
1749020241098		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
1749020241098		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
1749020241098		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
1749020241098		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
1749020241098		at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
1749020241098		at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
1749020241098		at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
1749020241098		at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
1749020241098		at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
1749020241098		at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
1749020241098		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
1749020241098		at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
1749020241098		at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
1749020241098		at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
1749020241098		at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
1749020241098		at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519)
1749020241098		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
1749020241097		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
1749020241097		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
1749020241097		at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
1749020241097		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
1749020241097		at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
1749020241097		at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
1749020241097		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
1749020241097		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
1749020241097		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
1749020241097		at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153)
1749020241097		at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:159)
1749020241097		at io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:799)
1749020241097		at io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:837)
1749020241097		at io.vertx.core.http.impl.Http1xClientConnection.handleResponseEnd(Http1xClientConnection.java:965)
1749020241097		at io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:307)
1749020241097		at io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:327)
1749020241097		at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleEnd(Http1xClientConnection.java:734)
1749020241097		at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:157)
1749020241097		at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:279)
1749020241097		at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.lambda$new$0(Http1xClientConnection.java:424)
1749020241097		at io.vertx.core.http.impl.HttpClientResponseImpl.handleEnd(HttpClientResponseImpl.java:250)
1749020241097		at io.vertx.core.http.impl.HttpEventHandler.handleEnd(HttpEventHandler.java:76)
1749020241097		at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
1749020241097		at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
1749020241097		at io.fabric8.kubernetes.client.vertx.VertxHttpRequest.lambda$consumeBytes$1(VertxHttpRequest.java:120)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
1749020241097		at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
1749020241097		at io.fabric8.kubernetes.client.http.ByteArrayBodyHandler.onBodyDone(ByteArrayBodyHandler.java:51)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
1749020241097		at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
1749020241097		at io.fabric8.kubernetes.client.http.StandardHttpClient.lambda$completeOrCancel$10(StandardHttpClient.java:141)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
1749020241097		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
1749020241097		at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
1749020241097		at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.lambda$handleResponse$0(OperationSupport.java:551)
1749020241097		at io.fabric8.kubernetes.client.utils.KubernetesSerialization.unmarshal(KubernetesSerialization.java:257)
1749020241097		at com.fasterxml.jackson.databind.ObjectMapper.readerFor(ObjectMapper.java:4379)
1749020241097		at com.fasterxml.jackson.databind.ObjectMapper._newReader(ObjectMapper.java:809)
1749020241097		at com.fasterxml.jackson.databind.ObjectReader.<init>(ObjectReader.java:194)
1749020241097		at com.fasterxml.jackson.databind.ObjectReader._prefetchRootDeserializer(ObjectReader.java:2450)
1749020241097		at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:669)
1749020241097		at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:174)
1749020241097		at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:265)
1749020241097		at java.base/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:322)
1749020241097		at java.base/java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:153)
1749020241097		at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:990)
1749020241097		at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:754)
1749020241097		at java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
1749020241097		at java.base/jdk.internal.misc.Unsafe.park(Native Method)

What helps is keycloak operator deployment full removal (sometimes a couple of times) and in some specific run the opertor works fine until next keycloak template diff. When this situation occur without manual intervention operator does not return to working state on his own.

We did not register similar behavior in previous versions of operator.

Version

26.2.4, 26.2.5

Regression

  • The issue is a regression

Expected behavior

Stable operator working.

Actual behavior

Keycloak diff cause failing (constantly restarting) operator.

How to Reproduce?

Install latest operator version (ie. 26.2.4, 26.2.5), generate diff on keycloak template handled by operator.

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0