2017-12-25 1 views
0

나는 log4j2 2.10.0을 사용하여 다음과 같은 코드가 있습니다크로니클 큐 + log4j2 비동기 로거

SingleChronicleQueue q = SingleChronicleQueueBuilder.binary(args[0]).blockSize(536870912).build(); 
    ExcerptAppender a = q.acquireAppender(); 

    char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 
    StringBuilder sb = new StringBuilder(); 
    Random random = new Random(); 
    for (int i = 0; i < 1000; i++) { 
     char c = chars[random.nextInt(chars.length)]; 
     sb.append(c); 
    } 
    String t = sb.toString(); 

    for (int i = 0; i < 1000000; i ++) { 
     m_logger.info(i + " " + t); 
     a.writeText(t); 
    } 

cq4 모두와 로그는 같은 디렉토리에 쓰고있다. 내가

12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601049 
    12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601050 
    12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601051 
    12:40:06.156 - [main] INFO c.c.c.a.r.SandboxApp 601052 

은 6 초 지연 만든 IO 작업의 어떤 종류가있어 보일 때까지

그리고 로그에

, 그것은 벌금을 폭파했다.

필자는 디스크, 마운트 등에 대해 충분히 알지 못합니다. writeText를 주석 처리하면 사라질 것이지만 기록 문제인지 또는 log4j2인지는 알 수 없습니다.

내 log4j2 매개 변수는

-DLog4jContextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -DAsyncLogger.RingBufferSize = 65536 * 65536 -DAsyncLogger.WaitStrategy = 수면 -Dlog4j2.AsyncQueueFullPolicy = 폐기 -Dlog4j2입니다 .DiscardThreshold = INFO

다음은 프로파일 러가

Profiler

감사를 보여주는거야!

답변

0

일단 메모리 매핑 파일 작업을 시작하면 Java의 영역을 떠나 운영 체제 및 하드웨어의 세계에 들어갑니다.

그래서 질문 1 : 어떤 운영 체제 (및 어떤 버전)를 사용하고 있습니까?

질문 2 : 실제 메모리 용량은 얼마나됩니까?

질문 3 : 사용중인 하드 디스크는 무엇입니까? SSD 또는 회전 디스크?

2017 년에는 200 MB/초의 쓰기 속도를 초과하는 소비자 등급 회전 디스크가 매우 빠릅니다. 이에 비해 this 2017 comparison에서 가장 빠른 SSD는 1900MB/초입니다.

메모리 매핑 된 파일에 약 2GB를 쓰려고했습니다. 그것은 어느 시점에서 물리적 디스크와 동기화되어야합니다. 그 동기화는 쉽게 6 초 걸릴 수 있습니다 ...

메모리 매핑 된 파일 "기쁨"이 동기화가 발생하면 거의 제어 할 수있다. 사람들은 이러한 일시 중지가 너무 커지지 않도록 작은 파일로 분할됩니다. 이런 종류의 응용 프로그램의 성능을 조정할 때 흑 마술의 일부가 있습니다. 이 분야에서 많은 것을 배울 수 있습니다. 즐거운 시간을 앞두고! 즐겨!

그런데

, 당신은 구성 할 수 없습니다

-DAsyncLogger.RingBufferSize=65536*65536 # not a number 

Log4j2이 실패 숫자로 65536*65536을 구문 분석을 시도하며, 대신 기본 버퍼 크기를 사용하도록 다시 떨어질 것이다. 원하는 링 버퍼 크기 인 을 바이트 단위로 지정해야합니다..

+0

감사합니다. 더 빠른 디스크를 발견하고 문제가 사라졌습니다. 이전의 마운트/드라이브가 너무 느리다는 것을 알고 있습니다. 감사! 성능 튜닝을 살펴 보겠습니다! 혹시 이러한 종류의 튜닝을 조사 할 참조/웹 사이트/책이 ​​있습니까? – Mag

관련 문제