sbのmod_perlによる高速化(PerlRun編)
sb入れてみてすぐに思ったのが「重い!!!!」ということ。
ppcLinuxとはいえ、OpenBlocksSという超ロースペックマシンで動いているから仕方がない。いまどきのPCをサーバにすれば全然問題ないのであろうが、時間を費やしマシンを移行し、かつOpenBlocksSの省スペース性を捨て去る気はない。とはいえ、クラシックCDコーナーのお客様に、ここままでは呆れられてしまう危険がある。
というわけで、現行のプラットホーム上で高速化を試みる。
Apache上でのperlCGIの高速化といえば、mod_perlである。
mod_perlは何通りかの高速化手法を提供するが、結論から言うとApache::RegistryというCGI自体をキャッシュしてしまう一番早い手法はNGで、今回はCGIプロセス起動のオーバヘッド(インタープリタのロード)とプリロードを行う、Apache::PerlRunハンドラを使用した。
この方式は、通常のCGIスクリプト形式のままでの実行をエミュレートしてくれることになり、問題が発生することが少ない。また、Perlインタプリイタのロードと、 標準モジュールロードのオーバヘッドがないという利点があります。
前置きが長くなりましたが、以下手順。
ppcLinuxとはいえ、OpenBlocksSという超ロースペックマシンで動いているから仕方がない。いまどきのPCをサーバにすれば全然問題ないのであろうが、時間を費やしマシンを移行し、かつOpenBlocksSの省スペース性を捨て去る気はない。とはいえ、クラシックCDコーナーのお客様に、ここままでは呆れられてしまう危険がある。
というわけで、現行のプラットホーム上で高速化を試みる。
Apache上でのperlCGIの高速化といえば、mod_perlである。
mod_perlは何通りかの高速化手法を提供するが、結論から言うとApache::RegistryというCGI自体をキャッシュしてしまう一番早い手法はNGで、今回はCGIプロセス起動のオーバヘッド(インタープリタのロード)とプリロードを行う、Apache::PerlRunハンドラを使用した。
この方式は、通常のCGIスクリプト形式のままでの実行をエミュレートしてくれることになり、問題が発生することが少ない。また、Perlインタプリイタのロードと、 標準モジュールロードのオーバヘッドがないという利点があります。
前置きが長くなりましたが、以下手順。
1、mod_perlをインストールする
上記mod_perlのサイトからApache1.3系を使用の場合はver1を、Apache2.0系を使用の場合はver2をダウンロードし、下記手順に従いインストール。
# tar zxvf mod_perl-1.0-current.tar.gz
# cd mod_perl-1.29
# perl Makefile.PL \
> USE_APXS=1 \
> WITH_APXS=/usr/local/httpd_mt/bin/apxs \
> EVERYTHING=1
# make
# make install
2、Apache::Requestをインストールする
CPANからインストールする。なお、CPAN初回起動時はいろいろ聞かれるが、画面の指示に従い進めること。
# perl -MCPAN -e shell
cpan> install Apache::Request
3、httpd.confの編集
以下は、
・/hogehoge/cgi-bin/sbにsbがインストールされている
・sbのみをmod_perl環境で動かしたい
場合の設定です。
一番上の行で、sb/libとsb/extを@INCにセットしてあげます。
====
PerlSetEnv PERL5LIB /hogehoge/cgi-bin/sb/lib:/hogehoge/cgi-bin/sb/ext
SetHandler perl-script
PerlHandler Apache::PerlRun
Options +ExecCGI
PerlSendHeader On
====
さらにmod_perlがきちんと動いているか確認するために、perl-stausを設定します。
====
SetHandler perl-script
PerlHandler Apache::Status
====
5、Apacheのリスタート
apachectl restartなどでApacheをリスタートします。
あとはテストをし確認します。
倍以上は早くなった感覚(正確にベンチマーク取ったわけではなく感覚ベースですが)。元が遅すぎたのだが、実用に耐えうるくらいになった。
上記mod_perlのサイトからApache1.3系を使用の場合はver1を、Apache2.0系を使用の場合はver2をダウンロードし、下記手順に従いインストール。
# tar zxvf mod_perl-1.0-current.tar.gz
# cd mod_perl-1.29
# perl Makefile.PL \
> USE_APXS=1 \
> WITH_APXS=/usr/local/httpd_mt/bin/apxs \
> EVERYTHING=1
# make
# make install
2、Apache::Requestをインストールする
CPANからインストールする。なお、CPAN初回起動時はいろいろ聞かれるが、画面の指示に従い進めること。
# perl -MCPAN -e shell
cpan> install Apache::Request
3、httpd.confの編集
以下は、
・/hogehoge/cgi-bin/sbにsbがインストールされている
・sbのみをmod_perl環境で動かしたい
場合の設定です。
一番上の行で、sb/libとsb/extを@INCにセットしてあげます。
====
PerlSetEnv PERL5LIB /hogehoge/cgi-bin/sb/lib:/hogehoge/cgi-bin/sb/ext
SetHandler perl-script
PerlHandler Apache::PerlRun
Options +ExecCGI
PerlSendHeader On
====
さらにmod_perlがきちんと動いているか確認するために、perl-stausを設定します。
====
SetHandler perl-script
PerlHandler Apache::Status
====
5、Apacheのリスタート
apachectl restartなどでApacheをリスタートします。
あとはテストをし確認します。
倍以上は早くなった感覚(正確にベンチマーク取ったわけではなく感覚ベースですが)。元が遅すぎたのだが、実用に耐えうるくらいになった。
- | comments (0) | trackbacks (0)

Comments