Hello all, I have a Kafka cluster deployed with version 3.2.1 , JDK 11 and
log4j 2.18.0. I built my own Kafka image. One of my Kafka brokers is
experiencing CPU issues, and based on the jstack information, it seems that
log4j is causing the problem due to its usage of StackWalker. How to solve this
issue?
Here is jstack information:
"data-plane-kafka-request-handler-6" #59 daemon prio=5 os_prio=0
cpu=86381259.23ms elapsed=1948787.21s tid=0x00007f8939c04800 nid=0x190 runnable
[0x00007f883f6f5000]
java.lang.Thread.State: RUNNABLE
at
java.lang.StackStreamFactory$AbstractStackWalker.fetchStackFrames([email protected]/Native
Method)
at
java.lang.StackStreamFactory$AbstractStackWalker.fetchStackFrames([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.getNextBatch([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.peekFrame([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.hasNext([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$StackFrameTraverser.tryAdvance([email protected]/Unknown
Source)
at
java.util.stream.ReferencePipeline.forEachWithCancel([email protected]/Unknown
Source)
at
java.util.stream.AbstractPipeline.copyIntoWithCancel([email protected]/Unknown
Source)
at java.util.stream.AbstractPipeline.copyInto([email protected]/Unknown
Source)
at
java.util.stream.AbstractPipeline.wrapAndCopyInto([email protected]/Unknown
Source)
at
java.util.stream.FindOps$FindOp.evaluateSequential([email protected]/Unknown
Source)
at java.util.stream.AbstractPipeline.evaluate([email protected]/Unknown
Source)
at
java.util.stream.ReferencePipeline.findFirst([email protected]/Unknown Source)
at
org.apache.logging.log4j.util.StackLocator.lambda$getCallerClass$2(StackLocator.java:57)
at
org.apache.logging.log4j.util.StackLocator$$Lambda$117/0x00000008001a6c40.apply(Unknown
Source)
at
java.lang.StackStreamFactory$StackFrameTraverser.consumeFrames([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.doStackWalk([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.callStackWalk([email protected]/Native
Method)
at
java.lang.StackStreamFactory$AbstractStackWalker.beginStackWalk([email protected]/Unknown
Source)
at
java.lang.StackStreamFactory$AbstractStackWalker.walk([email protected]/Unknown
Source)
at java.lang.StackWalker.walk([email protected]/Unknown Source)
at
org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:51)
at
org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:104)
at
org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:50)
at
org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at
org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at kafka.utils.Logging.logger(Logging.scala:43)
at kafka.utils.Logging.logger$(Logging.scala:43)
at
kafka.server.SessionlessFetchContext.logger$lzycompute(FetchSession.scala:364)
- locked <0x00000007fa037e58> (a kafka.server.SessionlessFetchContext)
at kafka.server.SessionlessFetchContext.logger(FetchSession.scala:364)
at kafka.utils.Logging.debug(Logging.scala:62)
at kafka.utils.Logging.debug$(Logging.scala:62)
at kafka.server.SessionlessFetchContext.debug(FetchSession.scala:364)
at
kafka.server.SessionlessFetchContext.updateAndGenerateResponseData(FetchSession.scala:377)
at kafka.server.KafkaApis.processResponseCallback$1(KafkaApis.scala:932)
at
kafka.server.KafkaApis.$anonfun$handleFetchRequest$33(KafkaApis.scala:965)
at
kafka.server.KafkaApis.$anonfun$handleFetchRequest$33$adapted(KafkaApis.scala:965)
at kafka.server.KafkaApis$$Lambda$1241/0x00000008007e4040.apply(Unknown
Source)