1月 17 2009
syslog-ng が速い
標準の syslog は遅い。Linux の実装は特に遅いし、FreeBSD の実装でも syslog-ng に比べれば遅い。
# FreeBSD の syslogd
irb(main):009:0> puts Benchmark.measure{ 100000.times{|i| Syslog.info("syslog test #{i}") } }
2.703125 1.039062 3.742188 ( 71.662001)
=> nil
# ports で入れた syslog-ng2
irb(main):010:0> puts Benchmark.measure{ 100000.times{|i| Syslog.info("syslog test #{i}") } }
1.859375 0.656250 2.515625 ( 34.068396)
=> nil
Linux は手元に無いので出せないけど、別のところでやったときに20倍~40倍程度の差がついた。
原因は fsync() (さすがに毎行 fsync() 打つのはなあ…)。でもソース見てないのでなんとも。(ぉぃ
ちなみに rsyslog はファイルに書く速度は syslog-ng より遅かったけど、DBに直接書けるとかそういうカスタマイズでカバーするところだろう。
てなわけで、ログサーバとかでは syslog-ng 使わない手は無いよな。(逆に言うとそうでもない限りは別にいいか、ともなる) MySQL や Bind のログの書き出しが遅い(せいで全体が遅い)、とかで困った場合も使えるかも。
なんで速いかソースコードを読むのはまたの機会に譲ったりする(ぉぃ)。
Tags: syslog-ng
