[Perl] PersistentPerl(SpeedyCGI)

Perlの高速化といえば mod_perl ということで、以前あるユーザーさんで使いましたが、CGIのようにいい加減な初期化処理や、apacheサーバーのプロセス内で複数のプログラムを動かす事によるトラブルなどで大変な思いをしました ^^;

あと、FastCGI というのもあり、Ruby On Rails とかで使われています。 今日 いろいろとググっていたら。


PersistentPerl(SpeedyCGI) というのがある事を知りました。


これは、一度実行したCGI をバックグラウンドプロセスとして常駐させて実行する事で高速化します。
したがって、使うには PersistentPerl(SpeedyCGI) のコマンドをインストールし CGI のヘッダーを 以下のように換えるだけで、完了 ・・・・ ほんと簡単です。

#!/usr/bin/perl
     ↓  
#!/usr/bin/speedy -- -M5 -r10 -t180

ある、大きな Perl CGI の性能をJMeterを使って測定したところ、約10倍の性能になっていました !!


また、PersistentPerl 以下のような、簡単なプロセス管理機能を持っていていて結構使えそうです。

  • -M 立ち上がるSpeedyCGIプロセスの最大数
  • -r 指定回実行すると、SpeedyCGIプロセスは終了する
  • -t 指定秒リクエストが来ないと、SpeedyCGIプロセスは終了する

例) #!/usr/bin/speedy -- -M5 -r10 -t180


とくに、-r オプションを指定しておけば、多少リソースがリークしているCGI でも使えます ^^;
もちろん、mod_perl を使う時と同じで、初期化、リソースの開放はちゃんとするのが基本ですが・・・