[ 
https://issues.apache.org/jira/browse/KAFKA-15141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Satish Duggana updated KAFKA-15141:
-----------------------------------
    Fix Version/s: 3.7.0

> High CPU usage with log4j2
> --------------------------
>
>                 Key: KAFKA-15141
>                 URL: https://issues.apache.org/jira/browse/KAFKA-15141
>             Project: Kafka
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 3.3.2, 3.5.0, 3.4.1
>            Reporter: Gaurav Narula
>            Assignee: Gaurav Narula
>            Priority: Major
>             Fix For: 3.6.0, 3.7.0
>
>
> Kafka brokers make use of the [Logging 
> trait|https://github.com/apache/kafka/blob/1f4cbc5d53259031123b6e9e6bb9a5bbe1e084e8/core/src/main/scala/kafka/utils/Logging.scala#L41]
>  which instantiates a Logger object for every instantiation of the class 
> using the trait by default.
> When using log4j2 as the logging implementation, the instantiation of a 
> Logger object requires a stack traversal 
> [[1]|https://github.com/apache/logging-log4j2/blob/2.x/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLoggerAdapter.java#L121]
>  and 
> [[2]|https://github.com/apache/logging-log4j2/blob/83bba1bc322e80e7e95edbebc2383f2724dbe0de/log4j-slf4j-impl/src/main/java/org/apache/logging/slf4j/Log4jLoggerFactory.java#L54].
> While LOG4J2-2940 ensures stack is not traversed unless required, the default 
> {{{}ContextSelector{}}}, 
> [ClassLoaderContextSelector|https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.html]
>  causes a stack traversal.
> These stack traversals are frequent and quite CPU intensive and profiling 
> suggests they consume ~5% CPU time (of the CPU stacks we have profiled on a 
> sample of clusters). While log4j2 users can potentially avoid this by 
> changing the context selector in their configuration, it is easy to overlook 
> and the default configurations results in high CPU usage inadvertently.
> An easy fix would be to instantiate the loggers statically for some commonly 
> instantiated classes in Kafka which make use of the Logging trait.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to