我在基于 Java Play Framework 的應(yīng)用程序中使用 Log4J2 AsyncLogger。我看到在高并發(fā)(每臺(tái)服務(wù)器約 3000 個(gè)用戶)下,環(huán)形緩沖區(qū)的剩余大小很快達(dá)到零,我的請(qǐng)求開始失敗。我的環(huán)形緩沖區(qū)大小為 1048576 (512*2048)。應(yīng)用程序線程數(shù)為 8(如 Play 的官方文檔中所述,每個(gè)內(nèi)核 1 個(gè)線程。)我的問題是:1> 如何提高消費(fèi)者寫入日志文件的速度?2> 我可以明確地使用多個(gè)消費(fèi)者來寫入我的日志文件嗎?如果是這樣,我在哪里指定這些消費(fèi)者?我已經(jīng)包含了我的 log4j2.xml 文件。任何幫助將不勝感激:)我嘗試過的事情:1> 增加環(huán)形緩沖區(qū)大?。ㄊ冀K為 2 的冪)。但最終還是出現(xiàn)了同樣的問題,使用過多的內(nèi)存顯得不是很優(yōu)雅。這個(gè)選項(xiàng)將在生產(chǎn)中被擊落。我錯(cuò)過了什么嗎?2> 嘗試不同的等待策略。沒運(yùn)氣。<?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>我希望每個(gè)盒子的并發(fā)性至少達(dá)到 4000(與沒有記錄器的情況相同)。但是我卡在2500左右。
添加回答
舉報(bào)
0/150
提交
取消