gpt4 book ai didi

java - Log4j2 AsyncAppender 性能测试

转载 作者:行者123 更新时间:2023-11-30 07:55:54 26 4
gpt4 key购买 nike

我正在编写一个 JMH 基准来测试 logback 的 AsyncAppender 的性能。

作为起点,我查看了 log4j2 的性能测试,但看起来它们不是端到端的测量。比如这里测试Log4j2 Async Appender Benchmark仅测试将可记录数据包装在对象中并将其排入中断程序(后备队列)的吞吐量。

@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void throughput2Params() {
logger.info("p1={}, p2={}", one, two);
}

这是全部还是我错过了一个测试,其中整个测量是从调用 logger.info() 到后台线程将数据写入磁盘/控制台/数据库等?

谢谢

最佳答案

使用 JMH 对端到端异步日志记录进行基准测试(使用像 FileAppender 这样的真正的附加程序)的问题是 JMH 生成许多日志事件的速度非常快。 FileAppender 无法跟上,因此(固定大小)异步队列会立即填满。

一旦队列已满,日志记录性能就会下降到比普通同步文件日志记录更糟糕的程度。

我们发现我们需要非常清楚我们想要测量的内容,因此我们最终分别测量了在有空间的情况下事件入队的速度,以及 FileAppender 将事件写入磁盘的速度。

使用 JMH 很难在端到端测试中同时测量两者,因为 JMH 不允许您控制触发的事件数量(据我所知)。所以很难避免排队。我怀疑您对队列已满后异步日志记录的速度有多快不感兴趣,因为这种情况极为罕见。

我们为 Log4j2 performance tests 采取的方法是将 JMH 与无操作附加程序一起用于异步日志记录测试,并为同步文件日志记录提供单独的 JMH 基准。

求原文Async Logger performance tests我们编写了一个自定义性能测试框架,该框架在不超过队列大小的突发事件中进行测试。 (可以在 Log4j 2 单元测试源目录中找到 PerfTest、MTPerfTest 和 PerfTestDriver 类。)这也不容易做到:您需要确保测试正确预热,确保所有日志记录线程都从同时,在独立于测试驱动程序的 JVM 中运行基准测试,并以某种方式收集结果等。

附言

请注意,ConsoleAppender 比记录到文件大约慢 50 倍(!)。使用控制台日志记录来比较日志记录库的性能并不是一个好主意。

关于java - Log4j2 AsyncAppender 性能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com