高度な設定
より行動な設定や、高度なカスタマイズについて説明します。
より行動な設定や、高度なカスタマイズについて説明します。
adiaryを mod_perl1(mod_perl Version 1.xx on Apache 1.xx)で動作させることもできます。一応動作は確認していますが、あまりメンテはされていません(問題ないとは思いますが)。
<IfModule mod_perl.c> <Files *.cgi> SetHandler perl-script PerlHandler Apache::Registry PerlSendHeader On </Files> </IfModule>
不具合がありましたら、お知らせいただければ極力対応致します。
mod_perl は Apache を Perl から操作するためのモジュールですが、Perl CGIを高速化するためにも利用出来ます。adiary は mod_perl2 に対応しています。Apache2.x が最大のパフォーマンスを発揮する worker MPM においても利用することができます。
(Aapache 2.x設定例) LoadModule perl_module modules/mod_perl.so <IfModule mod_perl.c> #PerlInterpStart 3 初期に起動するPerlインタプリタ数 #PerlInterpMax 5 同時処理するPerlインタプリタの最大数 #PerlInterpMinSpare 3 最小のスペア数 #PerlInterpMaxSpare 3 最大のスペア数 #PerlInterpMaxRequests 2000 いくつリクエストを受けたらインタプリタを一度終了するか PerlModule Apache2::MPM PerlSwitches -I/home/xxxx/public_html/adiary/lib PerlOptions +ParseHeaders <Directory "/home/xxxx/public_html/adiary/"> <Files ~ "\.cgi$"> SetHandler perl-script </Files> PerlResponseHandler ModPerl::Registry </Directory> </IfModule>
mod_perl環境において外部データベース利用時にコネクションプールを有効にするとサーバ資源を食いつぶすことがあります。adiaryを実行するデーモンを分離するか、コネクションプールをオフにしてください。
<$DB = loadpm('DB_pg', 'database=adiary', 'adiary', 'test', 0)>
SpeedyCGI、FastCGI環境では問題ありません。
デーモンを分離する場合は、平田さんの記事「mod_perl用Apacheを分離 - Magical Diary, beta version」が大変参考になります。なおポートオーバーライドは adiary.conf.cgi で行う方が楽でしょう。
<$ENV.SERVER_PORT=80>
prefork MPM のとき(mod_perl1も)、同時実行数(Perlインタプリタの最大保持数)は ServerLimit により制限されます。デフォルトでは 256 です。
worker MPM のとき、同時実行数は ServerLimit と PerlInterpMax の積により制限されます。デフォルトでは「16×5=80」になります。なお PerlInterpMax を小さくするときは、同時に PerlInterpStart も小さくします。PerlInterpStart より小さな値を PerlInterpMax に設定しても無効です。
FreeBSD6.x と PostgreSQL 8.2 において、同時接続数20程度でシステムリソース*1を食いつぶしたことがあります。くれぐれもご注意ください。
FastCGIとは、Apacheに組み込むことで(Perlに限らず)CGIの動作を高速化させるためのモジュールです。利用するためには、ApacheにFastCGIを組み込み、Perlライブラリとして FCGI.pm(FastCGI用Perlモジュール)が必要です。
FastCGIでadiaryを利用する場合は、実行ファイルとして adiary.fcgi をご利用ください。
(Apache の設定例) LoadModule fastcgi_module modules/mod_fastcgi.so FastCgiConfig -maxProcesses 4 FastCgiConfig -startDelay 10 <IfModule mod_fastcgi.c> FastCgiIpcDir /tmp/fcgi_ipc/ AddHandler fastcgi-script .fcgi </IfModule>
SpeedyCGIとはPerlスクリプトをメモリ常駐させることで、高速化するフロントエンドです。詳細はこちらを参照してください。通常はディストリビューションに収録されていると思いますが、ソースコードはここで配布されています。
SpeedyCGI により adiary を実行する場合は adiary.speedy.cgi を実行してください。なお SpeedyCGI のパスとして実行ファイル1行目に
#!/usr/bin/speedy
と書かれていますので、サーバによって適時書き換えてください。
(書き換え例)必ずサーバの設定を参照のこと。 #!/usr/local/bin/speedy #!/usr/bin/perperl