首页 > 解决方案 > log4j2.asyncLoggerRingBufferSize 的插槽大小是多少

问题描述

官方文档解释了插槽的数量,但没有说明每个插槽的大小:

https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html

我搜索了一下,但也没有得到太多信息。

SO:了解异步 Logger 中的 Ring Buffer

我正在运行一项服务,该服务以非常高的频率记录大量堆栈跟踪(约 50 行),导致整体延迟增加。当我修剪这些堆栈跟踪时,延迟会减少。我以 ~3MB/s 的速度记录,我的记录器环形缓冲区大小是默认值 (256 * 1024)。我想知道我是否正在填满这个队列导致延迟增加。如果设置为 256 * 1024,此队列的大小(以 MB 为单位)是多少?

标签: javalog4jbuffer

解决方案


延迟可能是由 Log4j 2 ThrowableProxy 引起的。这目前正在调查中,请参阅https://issues.apache.org/jira/browse/LOG4J2-2391

要查找内存中 ringbuffer 插槽的实际大小,请使用 JOL 工具 ( http://openjdk.java.net/projects/code-tools/jol/ )。来自 JOL 文档:

... 大量使用 Unsafe、JVMTI 和 Serviceability Agent (SA) 来解码实际的对象布局、占用空间和引用。这使得 JOL 比其他工具更准确......


推荐阅读