とにかく早い LMAX Disruptor
とにかく早かった
(検証した詳細は後述)
とりあえず読んで
Log4j 2にも採用されたLMAX Disruptorはなぜ狂ったように速いのか? | JUMPERZ.NET Blog
Go言語のことを俺は全然知らないけど、Go言語でもこの LMAX Disrutpor を参考にして SurgeMQ ってやつのパフォーマンスを上げたとか
golang - 750,000MPSを達成したsurgemqの秘密に迫る - Qiita
Log4j2 のサイトにも、この辺りの話は載ってる
Log4j 2 Asynchronous Loggers for Low-Latency Logging - Apache Log4j 2
話戻して、 log4j2 を使って自分でも確認してみる
確認のプログラム
while 文でログ出力を延々行ってるだけ。
log4j2.xml はログをローリングするAppenderを切り替えて確認
確認方法1
普通にサーバ起動
RollingFile を使用
確認方法2
VMに -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector を指定して起動
(これをすると、自動的に全ての Appender が非同期になるとか)
RollingRandomAccessFile を使用
Appenderの詳細は Log4j2 のサイト参照(英文)
Log4j 2 Appenders - Apache Log4j 2
方法1、2 ともに500MBのログファイル出力に掛かった時間を求めてみた
→ログの最初と最後の時間から計測
計測環境のPCは
OS:Windows7 64bit
CPU:Core i7 3930K
メモリ:32GB
結果
方法1:20.129s
方法2: 5.357s
Log4j2 のサイトの通りに早かった
LMAX Disruptor のモジュールは公開されているので、
使い方次第でアプリの高パフォーマンス化も可能だと思われる。