나는 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
다음은 프로파일 러가
감사를 보여주는거야!
감사합니다. 더 빠른 디스크를 발견하고 문제가 사라졌습니다. 이전의 마운트/드라이브가 너무 느리다는 것을 알고 있습니다. 감사! 성능 튜닝을 살펴 보겠습니다! 혹시 이러한 종류의 튜닝을 조사 할 참조/웹 사이트/책이 있습니까? – Mag