0

私は 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 倍遅くなるのはなぜですか。

どんなポインタでも大歓迎です。

ありがとう。

4

1 に答える 1

0

これは、ファイル IO 自体の問題ではありませんでした。タイムスタンプを取得するシステム コール ( date +%Y%m%d) がありましたが、cgi の 3 倍の速度でした。これは減速効果がありました。

ただし、modperl ではなく cgi を介して実行すると、apche がシステム コマンドを 3 倍の速さで実行できる理由はわかりません。

質問内容に誤りがありましたことをお詫び申し上げます。

于 2011-06-16T05:08:45.637 に答える