FastCGIによる高速化

スタンドアローン版は最も高速に動作します。

キャシュ環境による高速化

自前サーバ等で動作させる場合*1、FastCGIの設定を行うことで数倍以上のパフォーマンスの向上が見込めます。またシステム設定からページキャッシュ機能を有効にすると更に高速化されます。

adiaryのバージョンアップ時、.pmファイル書き換え時等のモジュールのリロードは内部で自動的に行われます。Apache等の再起動は不要です。

*1 : レンタルサーバ等では通常は設定不可

FastCGI

Apache側にプロセス管理モジュールを入れるタイプのキャッシュ環境です。mod_fastcgiではなくmod_fcgidを推奨します。

apt-get install libapache2-mod-fcgid libfcgi-perl

Apacheでモジュールを有効にする必要があります。/etc/apache2 などの設定ディレクトリに移動します。

cd mods-enabled
ln -s ../mods-available/fcgid.load
ln -s ../mods-available/fcgid.conf
vi fcgid.conf

confの設定詳細はApacheのマニュアルをみてください。いくつか注意点だけ触れておきます。

Fcgidはデフォルトで「フォームの最大送信サイズが128KB」「タイムアウトが40秒」などのかなり強い制限値に設定されています。この設定ではインポート処理やアルバム機能で問題となりますので、適当に緩和してください。

<IfModule mod_fcgid.c>
	FcgidMaxRequestLen	131072
	FcgidIOTimeout		120
</IfModule>

最後に、adiaryの実行ファイルを adiary.fcgi に変更してください。

FastCGI + mod_proxy_cgiにる設定

特にメリットはありませんが、Nginxでの設定のように、あらかじめFastCGIデーモンとして起動しておくこともできます。

デーモン起動の方法はNginxでの設定を参照してもらうとして、ここではApache側の設定のみ解説します。Webサーバ上の /adiary/ に adiary をインストールしている場合、次のように設定を記述します。

# ./adiary.fcgi 127.0.0.1:9000
ProxyPass	/adiary/adiary.fcgi	"fcgi://localhost:9000/"

UNIX domain socket使用時は以下のように書きます。

# ./adiary.fcgi adiary.sock
ProxyPass	/adiary/adiary.fcgi	"unix:/path/to/adiary.sock|fcgi://localhost"

廃止された設定情報

以下の方法はVer3.40より廃止されました。Ver3.34以前では利用できます。

mod_perl2

長らく最速の方法でしたが、より高速なhttpデーモンの開発により廃止されました。

Apache自体にperlを組み込んでしまうという形式のキャッシュ環境です。mod_perl (Ver1)でも動くはずです。mod_perlを有効にした上で下記の設定を Apache の confファイル(site-enabled/000-default等)に記述します。

<IfModule mod_perl.c>
PerlSwitches -I/path/to/adiary/lib
PerlOptions  +ParseHeaders

<Directory "/path/to/adiary/">
        <Files ~ "\.mod\.cgi$">
                SetHandler perl-script
        </Files>
        PerlResponseHandler ModPerl::Registry
</Directory>
</IfModule>

実行ファイルは adiary.mod.cgi になります。

SpeedyCGI

Perl自体をラップしてスクリプトを常駐させます。

お手軽でおすすめの方法でしたが、長らくSpeedyCGIがメンテナンスされておらずImage::Magickの利用で不具合が起こるため廃止されました。

廃止はされましたが、動作に必要なコードは残してありますので、adiary.speedy.cgiをダウンロードして配置すれば、一応動作はするはずです。その際、古いディストリビューション以外では、SpeedyCGIのソースに最新のパッチを充ててコンパイルする必要があると思われます。

速度計測メモ

Apache 2.4

  • adiary Ver3.22 on Perl 5.24.1
  • リクエスト/秒: ab -n 1000 -c 100 -l
  • 平均応答速度: ab -n 100 -c 1 -l
  • ページキャッシュoff(動的生成)
動作方法平均応答速度Request/sec
CGI52.502 ms 53
SpeedyCGI17.776 ms 467
FastCGI3.804 ms 471
mod_perl 2.04.586 ms 762
adiary.httpd.pl3.473 ms1043

nginx Ver1.10.3

  • adiary Ver3.40-dev(開発版)
  • マシン等、他はApacheと同一。
動作方法平均応答速度Request/sec
FastCGI (TCP)2.581 ms 524
FastCGI (UNIX socket)2.441 ms 549

UNIXドメインソケットとTCP接続(127.0.0.1)の差はほとんど無い模様(5%程度)。