홈>
Java Play Framework 기반 응용 프로그램에서 Log4J2 AsyncLogger를 사용하고 있습니다. 높은 동시성 (서버 당 최대 3000 명의 사용자)에서 링 버퍼의 남은 크기가 빠르게 0에 도달하고 요청이 실패하기 시작합니다. 내 링 버퍼 크기는 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에 붙어 있습니다.
관련 질문
- java : AWS 지연 시간 지표 로깅 문제 스프링 부트
- Java의 로거가 작동하지 않습니다. 문제는 패키지 SLF4J에 있습니다.
- java : 루트 외에 여러 로거를 사용할 때 log4j2 클래스 이름
- java : 로그백 파일 오류: [rollingPolicy]에 적용 가능한 작업이 없습니다. 현재 패턴은 [[configuration][appender][rollingPolicy]]입니다.
- java : 일부 Spring 부트 특정 로그 억제
- java : Log4j2 -구성
- java : Log4J 2.x 구성 위치를 지정하는 방법은 무엇입니까?
<올>
위치를 사용하지 않고 속도를 높일 수 있습니다. 교체
[%C{1}:%L]
단순히%c
와 함께 . Log4j 2 성능 문서는 로깅 위치가 100 배 느리다는 것을 보여줍니다.여러 소비자가 로깅 속도를 높이 지 않습니다. 하드 디스크는 여전히 단일 엔드 소비자이며 여러 스레드가 동시에 쓰려고 시도하는 경우 (데이터 손상을 방지하기 위해 잠금 사용) 실제로 속도가 느립니다. 이것이 바로 파괴자가 원래의 방식으로 설계된 이유입니다.