为了账号安全,请及时绑定邮箱和手机立即绑定

Log4J2 AsyncLogger 正在以高并发填充 LMAX 中断器的环形缓冲区

Log4J2 AsyncLogger 正在以高并发填充 LMAX 中断器的环形缓冲区

拉丁的传说 2022-05-25 10:44:17
我在基于 Java Play Framework 的应用程序中使用 Log4J2 AsyncLogger。我看到在高并发(每台服务器约 3000 个用户)下,环形缓冲区的剩余大小很快达到零,我的请求开始失败。我的环形缓冲区大小为 1048576 (512*2048)。应用程序线程数为 8(如 Play 的官方文档中所述,每个内核 1 个线程。)我的问题是:1> 如何提高消费者写入日志文件的速度?2> 我可以明确地使用多个消费者来写入我的日志文件吗?如果是这样,我在哪里指定这些消费者?我已经包含了我的 log4j2.xml 文件。任何帮助将不胜感激:)我尝试过的事情:1> 增加环形缓冲区大小(始终为 2 的幂)。但最终还是出现了同样的问题,使用过多的内存显得不是很优雅。这个选项将在生产中被击落。我错过了什么吗?2> 尝试不同的等待策略。没运气。<?xml version="1.0" encoding="UTF-8"?><Configuration><!--  status="trace" attribute for Configuration tag prints in logs [ Starting AsyncLoggerConfig disruptor for this configuration with ringbufferSize=262144] --><!-- default log file names in case it fails to read it from property file --><Properties>    <Property name="FILE_NAME">/opt/lol/logs/meh.log</Property>    <Property name="FILE_PATTERN">/opt/lol/logs/meh_%d{yyyy-MM-dd_HH}.log</Property></Properties><Appenders>    <RollingRandomAccessFile name="ASYNCFILE" fileName="${sys:FILE_NAME}" filePattern="${sys:FILE_PATTERN}">        <PatternLayout pattern="[meh:%d{yyyy-MM-dd HH:mm:ss},%d{SSS}] %-5level[%thread][%C{1}:%L] %msg%n"/>        <Policies>            <TimeBasedTriggeringPolicy />        </Policies>    </RollingRandomAccessFile>    <Console name="CONSOLE" target="SYSTEM_OUT">        <PatternLayout pattern="[meh:%d{yyyy-MM-dd HH:mm:ss},%d{SSS}] %-5level[%thread][%C{1}:%L] %msg%n"/>    </Console></Appenders><Loggers>    <logger name="akka" level="INFO" />    <AsyncRoot level="INFO" includeLocation="true">       <!-- <AppenderRef ref="CONSOLE"/>-->        <AppenderRef ref="ASYNCFILE"/>    </AsyncRoot></Loggers></Configuration>我希望每个盒子的并发性至少达到 4000(与没有记录器的情况相同)。但是我卡在2500左右。
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

  1. 您可以通过不使用 location: 来提高速度[%C{1}:%L],只需替换为%c. Log4j 2性能文档显示日志记录位置慢了 100 倍。

  2. 多个消费者不会加快日志记录。硬盘仍然是单一的最终消费者,并且有多个线程尝试同时写入(使用锁定来防止数据损坏)实际上更慢。这就是为什么破坏者是这样设计的。


查看完整回答
反对 回复 2022-05-25
  • 1 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号