[pod] [xml]

名前

SpeedyCGI - CGIスクリプトを常駐させて実行することによりスピードアップさせます

概要

 #!/usr/bin/speedy
 ### ここにあなたのスクリプト
 print "Content-type: text/html\n\nHello World!\n";
 ##
 ## オプションとして、いくつかの目的のためCGI::SpeedyCGIモジュールを利用
 ##
 # SpeedyCGI オブジェクトの作成
 use CGI::SpeedyCGI;
 my $sp = CGI::SpeedyCGI->new;
 # SpeedyCGIの下で実行されているかどうかを調べる
 print "Running under speedy=", $sp->i_am_speedy ? 'yes' : 'no', "\n";
 # shutdownハンドラの登録
 $sp->add_shutdown_handler(sub { do something here });
 # クリーンアップ・ハンドラの登録
 $sp->register_cleanup(sub { do something here });
 # いくつかのSpeedyCGIオプションの設定/取得
 $sp->setopt('timeout', 30);
 print "maxruns=", $sp->getopt('maxruns'), "\n";

説明

SpeedyCGI はCGI perlスクリプトを常駐させて実行する方法です。 通常それらのスクリプトをより速く実行させます。スクリプトを SpeedyCGIを使うように変換するためには、ほとんどの場合、スクリプトの先頭に あるインタープリタの行を以下のものから:

    #!/usr/bin/perl

以下のように変更します

    #!/usr/bin/speedy

スクリプトが初めて動いた後、終了する代わりに、perlインタープリタをメモリ上で 実行したままです。後のからの実行では、それぞれの実行のために新しいperl インタープリタを開始する代わりに、新しい要求を扱うため、このインタープリタが 使われます。Cで書かれた、非常に速いフロントエンド・プログラムが各要求のために 実行されます。この高速のフロントエンドは常駐しているPerlプロセスに接触します。 それは通常既にメモリ上にあり、作業を行い、結果を返します。

デフォルトでは各perlスクリプトは独自のUnixプロセスで実行されます。そのため 1つのperlスクリプトが他のものに影響を与えることはありえません。メモリがリーク したり、その他の常駐して実行することを邪魔するような障害を持っている プログラムを扱うために、コマンドライン・オプションを使うことも出来ます。

SpeedyCGIはperl CGIスクリプトをスピードアップさせるために使うことが出来ます。 CGIの仕様に従い、webサーバーの内部でperlコードを実行しません。 perlインタープリタがwebサーバーの外側で実行されるために、webサーバーそのものに 障害を起こすことはありえません。

SpeedyCGIは、Apache webサーバーで各リクエストのためのfork/execを行う オーバーヘッドをなく、スクリプトが実行できるよう、Apacheモジュールも 提供しています。このモジュールでは、少量のフロントエンドのコードが webサーバーの中で実行されます - この場合でもperlインタープリタはサーバの 外側で走ります。

SpeedyCGI と PersistentPerlは現在、両方とも同じコードのための名前です。 SpeedyCGIが元の名前ですが、人々がそれがやっていることを信じなかったので、 PersistentPerlが別名として使われました。どこかの時点で、常に2つの ディストリビューションを持っていることを避けるため、おそらくSpeedyCGIが PersistentPerlに置き換えられるか、PersistentPerlのサブクラスになるでしょう。

オプション

オプション値の設定

SpeedyCGI オプションはいくつかの方法で設定することができます:

コンテキスト

全てのコンテキストで以下の全てのオプションが使えるわけではありません。 各オプションのためのコンテキストは下記のセクションでの"コンテキスト"の 行であげています。3つのコンテキストがあります:

利用できるオプション

メソッド

以下のメソッドをCGI::SpeedyCGIモジュールで利用することができます。

インストール方法

SpeedyCGIをインストールするためには、あなたのOS用のバイナリ・パッケージを ダウンロードするかソースコードからSpeedyCGIをコンパイルする必要があります。 ソースコードやバイナリを取得する場所についての情報は"ダウンロード"を ご覧ください。

バイナリのインストール

あなたのOS用のバイナリ・パッケージをダウンロードsるのであれば、 あなたのOS用の通常のパッケージ・ツールを使って、それをインストールする 必要があります。それを行うコマンドは以下の通りです:

apacheモジュールもインストールするのであれば、Apacheを "Apache構成設定"に書かれているようにApacheを設定する必要があります。

ソースコードのインストール

SpeedyCGIをコンパイルするためには、perl 5.004以降とCコンパイラ、 おそらくはあなたのperlディストリビューションがコンパイルされたのと 同じコンパイラが必要です。SpeedyCGIはSolaris、Redhat Linux、 FreeBSDそしてOpenBSDで動くことがわかっています。他のOSや以前のバージョンの Perlでは問題があるかもしれません。SpeedyCGIはスレッド対応の(threaded) perlでは動かないかもしれません -- リリース2.10では、LinuxとSolarisでは スレッド対応のperlでうまく動くようですが、FreeBSDではそうではありません。

標準のインストール

ソースコードからの標準のインストールをするためには、以下のように実行してください:

    perl Makefile.PL
    make
    make test
    make install

これはspeedyとspeedy_backendバイナリをperlがインストールされているのと 同じディレクトリに、SpeedyCGI.pmモジュールを標準のperl libディレクトリに インストールします。またapxsがあなたのパスにあれば、mod_speedycgiモジュールを インストールしようともします。

他のディレクトリへのインストール

標準のperlディレクトリにインストールする権限を持っていない、あるいは他の場所に インストールしたいのであれば、一番簡単な方法はperlの独自のコピーを他の場所に コンパイルし、インストールし、それから"perl Makefile.PL"を実行するときに そのあなたの新しいバージョンのperlを使うことです。そうすれば SpeedyCGIバイナリとモジュールは、新しいバージョンのperlと同じ場所に インストールされます。

独自のperlをインストールできなければ、以下の手順を取ることが出来ます:

Apacheのインストール

オプションのapache mod_speedycgiモジュールをコンパイルするためには、apxs コマンドがあなたのパスになければなりません。Redhatは"apache-devel" RPMに 含めています。しかしインストールでは適切に機能しないかもしれません。

もしapacheのインストールが失敗したら:

Apache構成設定

mod_speedycgiがインストールされたら、あなたのperlスクリプトのために 使われるように構成設定する必要があります。それには2つの方法があります。

警告!以下の手順はあなたのwebサイトのセキュリティを危うくさせるかも しれません。SpeedyCGIに関連するセキュリティの危険性は、通常のCGIの ものに似ています。以下の変更のセキュリティとの関連がわかならければ、 それを行わないようにしてください。

  1. パスによる設定

    これは/cgi-binを動かす方法に似ています - このパスにある全てのものは SpeedyCGIにより扱われます。以下の行をあなたのhttpd.confの一番上の ほうに追加してください - これによりあなたのcgi-binディレクトリにある 全てのスクリプトが、/speedy/script-nameとしてアクセスされると SpeedyCGIにより扱われるようになります。

        Alias /speedy/ /home/httpd/cgi-bin/
        <Location /speedy>
        SetHandler speedycgi-script
        Options ExecCGI
        allow from all
        </Location>
  2. ファイル拡張子による設定

    これは、.cgiファイルが動く方法と同じように、ある拡張子を持っている全ての ファイルをSpeedyCGIに扱わせるようにします。以下の行をあなたのhttpd.confの 一番上のほうに追加してください - これは拡張子".speedy"であるファイルが SpeedyCGIにより扱われるようにします。

        AddHandler speedycgi-script .speedy
        <Location />
        Options ExecCGI
        </Location>

よくある質問

グループの使い方

SpeedyCGIのグループ機能はperlインタープリタにより使用されるメモリ量を 減らすのを助けるために利用することができます。グループが使われないと (つまりグループ名が"none"であれば)、各perlスクリプトは、それ自身の perlインンタプリタの集合を与えられ、他のスクリプトのために使われる perlインタープリタからは分離されます。SpeedyCGIでは各perlインタープリタは 別のシステム・プロセスになります。

グループ化が使われるとき、perlインタープリタはグループに入れられます。 そのグループでの全てのperlインタプリタは、同じグループのperlスクリプトを 実行することが出来ます。全てのスクリプトを同じグループに入れておけば、 1つのperlインタープリタがあなたのシステム上の全てのperlスクリプトを実行する ということを意味します。多くの異なるperlスクリプトを実行するときに 必要とするメモリを大幅に減少せることができます。

SpeedyCGIグループ名はそれ自身へのエンティティです。それは UnixグループやApacheでのGroupディレクティブとは関係ありません。 グループ名は彼らの必要を基にしてSpeedyCGIを実行する人によって作成 されます。2つの特別なグループ名"none"と"default"があります。 その他の全てのグループ名は"オプション"で説明したGroupを使って SpeedyCGIのユーザによって作成されます。

可能な限りグループ化の量を最大限に使いたければ(つまり同じインタープリタで 全てのスクリプト)、常にグループ名"default"を使わなければなりません、 こうすると、出来る限り最小限のperlインタープリタを取得することになります。 各perlインタープリタは、あなたのperlスクリプトをどれでも実行することができます。

全てのスクリプトにグループ"default"を使うことがリソースの使用を最も効率的に するとしても、これが常に可能あるいは望ましいことではありません。あなたは 以下の理由で他のグループ名を使いたいと思うかもしれません:

ダウンロード

バイナリ

各種OSのためのバイナリが以下の場所にあります:

    http://daemoninc.com/SpeedyCGI/download.html

ソースコード

標準のソースコード・ディストリビューションはCPANミラーのいずれか、あるいは 下記の場所から取得することができます:

    http://daemoninc.com/SpeedyCGI/download.html
    http://www.cpan.org/modules/by-authors/id/H/HO/HORROCKS/

最新の開発コードはSourceForge CVSリポジトリから以下のコマンドを使って 取得することができます:

 cvs -d:pserver:anonymous@cvs.SpeedyCGI.sourceforge.net:/cvsroot/speedycgi login 
 cvs -z3 -d:pserver:anonymous@cvs.SpeedyCGI.sourceforge.net:/cvsroot/speedycgi co 2.x

パスワードのためのプロンプトにはEnterを押してください。

作者

    Sam Horrocks
    http://daemoninc.com
    sam@daemoninc.com

貢献者

多くの人々がコード、パッチ、アイデア、リソースなどで助けてくれました。 ここでだれか抜けているかもしれません - もしそうであれば私にメールをください。

参考資料

perl(1), httpd(8), apxs(8).

さらなる情報

SpeedyCGI ホームページ

http://daemoninc.com/SpeedyCGI/

メーリングリスト

バグとTodoリスト

バグや変更リクエストについてはメーリングリストに報告してください。

現在のバグ/todoリストは以下の場所にあります http://www.sourceforge.net/projects/speedycgi/. Bug Trackingメニューに行き、バグについてはGroupで"bug"を todoリストについてはGroupで"rfe"を選択してください。

日本語翻訳

http://member.nifty.ne.jp/hippo2000/perltips/CGI/SpeedyCGI.htm

(訳者注:現在移動中です)

ベンチマーク

http://daemoninc.com/SpeedyCGI/benchmarks/

成功事例

http://daemoninc.com/SpeedyCGI/success_stories/

修正履歴

http://daemoninc.com/SpeedyCGI/CGI-SpeedyCGI/Changes

YAPC 2001 でのプレゼンテーション

YAPC2001でSpeedyCGIの紹介を話してきました。それは下記の場所にあります http://daemoninc.com/SpeedyCGI/yapc_2001/

著作権(COPYRIGHT)

Copyright (C) 2002 Sam Horrocks

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

This product includes software developed by the Apache Software Foundation (http://www.apache.org/).