私は cgi で動作するアプリケーションを持っています。mod_perl2 (apache2::compat を使用) に移植し、cgi ファイルを mod_perl ハンドラーに書き直しました。不思議なことに、mod_perl によって得られたパフォーマンスは、ロギングのレイテンシーによって影が薄くなります。
アプリケーションのロギング メカニズムは、logger->logmsg(msg) のようなものです。
logger::logmsg { my $msg = shift; LOGFILEを開く、">>logfile"; print LOGFILE $msg close LOGFILE; }
アプリケーションによって多数のロギングが行われ、さまざまなレベルのロギングによって制御されます。ロギングをオフにすると、トランザクションは cgi よりも mod_perl で 80% 速く動作します (コード ベースは同じです。mod_perl のハンドラーと cgi のゲートウェイ スクリプトを使用して実行しているだけです)。mod_perl でログ アプリケーションをオンにすると、実行速度が 80% 遅くなります。
ログから、同じログ モジュールを cgi スクリプトとして実行するとファイルに msg を追加するのに 0.01 秒かかり、mod_perl ハンドラを介して実行すると 0.03 秒かかることがわかりました。
STDOUT を使用して同じものをログ ファイルにリダイレクトする、request_obj->log メソッドを使用するなど、さまざまな方法を試しましたが、cgi にかかる時間に勝るものはありません。このアプローチで間違っていることはありますか?
同じ apache サーバーで mod_perl スクリプトを使用して実行すると、ファイル操作が 3 倍遅くなるのはなぜですか。
どんなポインタでも大歓迎です。
ありがとう。