PersistentPerlとは、Perlを高速化する手法の一つである。主にPerlで書かれたCGIを高速化するために使われているがCGI以外のシェル等からでも利用できる。

概要

Perlスクリプトは、ユーザーからリクエストがある度に Perlプロセスの生成 Perlスクリプトの文法解釈 スクリプトのコンパイル コンパイルされたバイトコードの実行 プロセスの破棄 が行われる。大量のリクエストがあればその分だけ繰りかえされ、この事がパフォーマンスの悪化に繋がっている。

PersistentPerlはPerlスクリプトの実行を リクエストの受付 (リクエストを受けられるバックエンドプロセスがいなければ)バックエンドプロセスの生成 UNIXドメインソケットを使ったバックエンドプロセスとのデータ受け渡し を行うフロントエンドプロセスと(つまりフロントエンドプロセスはPerlに関わらない) 初回のみPerlスクリプトをコンパイルし、バイトコードを保持したままプロセスとして残る フロントエンドからのリクエストに従ってコンパイル済みバイトコードを実行 を行うバックエンドプロセスの2つに分けることで2回目以降のスクリプトの文法解釈とコンパイルにかかる時間をカットし結果としてプログラム起動速度の向上およびサーバ負荷の低下が可能となる。

利用方法

CGIとして実行するならばスクリプト冒頭の #!/usr/bin/perl などと書かれている部分を #!/usr/bin/perperl とするだけで既存のコードはほぼそのまま高速化に寄与できる。

Apacheならmod_persistentperlというモジュールがあり、リクエストの度に行われるフロントエンドプロセスの生成に伴うコストを無くすことが可能である。 ただしmod_persistentperlはworker MPMには非対応である。

関連項目

CGI Perl

外部リンク

PersistentPerl - Speed up perl scripts by running them persistently. SourceForge.net: PersistentPerl Apache2.2にmod_SpeedyCGIを組み込むためのパッチの当て方