技術メモブログ

技術ネタの備忘録的なブログ。技術ネタ以外にも気になったことをつらつら書きます

とにかく早い 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 のモジュールは公開されているので、

使い方次第でアプリの高パフォーマンス化も可能だと思われる。