パイプ経由のログ出力はCPUを浪費する
Apache HTTP Serverでログをパイプ経由でプログラムに出力すると、リクエストを処理するたびにログを処理するプログラムへのコンテキストスイッチが起こります。 そのためアクセスが増えたときにCPUをかなり浪費します。UltraSPARC T1は32個のコンテキストを保持できて、1クロックでコンテキストスイッチできるので問題ないと思っていました。しかし、CPUの使用率が100%に達 して、さらに負荷が掛かる状況になると違いました。
ftp.jaist.ac.jpにはパイプ経由のログ出力が3つあります。エラーログとアクセスログのrotatelogsへの出力と、以前紹介したSSD キャッシュのためのプログラムへの出力です。アクセスが多いときには最後の1つを止めていました。これを止めないと13,500クライアント、660リク エスト/秒が限界で、ロードアベレージが10,000を超えます。止めれば17,000クライアント、790リクエスト/秒までいけます。 rotatelogsをやめてファイルにログを直接出力するようにすれば、さらに余力ができるはずです。今後はFirefoxのアップデートで欧米からの アクセスがなくなるので、そこまで逼迫することはないでしょうけど。
ftp-adminの憂鬱: パイプ経由のログ出力はCPUを浪費する
pipeで流し込むと重たくなり気味なので、日が変わると同時にlogrotateするのが一番良さそうです。
1年前 | 固定リンク | 2010年 7月 25日 | 
