私がMuninを動的生成に切り替えて困った事。それは、サーバの慢性的なメモリ不足でした。公式ドキュメントに書かれている方法や、yum で munin-cgi パッケージを導入すると、mod_fcgid を使った動的生成になります。
mof_fastcgi の設定方法は、ページ後半をご覧下さい。
この mod_fcgid は、確かに描画は高速かもしれませんが、そのためには潤沢なメモリリソースが必要になります。(私が使っているような)貧弱な環境では、mod_fastcgi を使う事で、比較的メモリに余裕が増えました。
■ mod_fcgid と mod_fastcgi は別モノ
まず、それぞれが別のモジュールという点に注意してください。どちらも FastCGI プロトコルを扱い、メモリ空間中に常駐することでウェブサーバのレスポンスを向上させる働きがあります。しかし、実装方法や設定方法は異なります。
※ mod_fcgid は、Apache プロジェクト で開発が進んでいるものです。一方、元々の FastCGI の思想で設計されたモジュールが mod_fastcgi です。名前は似ていますが、別モノですよ、と。
mod_fastcgi の良いところは、タイムアウトの概念がある所です。mod_fcastcgi mod_fcgid は、呼び出された CGI プログラムは常駐しつづけるので頻繁なアクセスがあるサイトでは重宝できます。一方の mod_fastcgi は、処理が終わったらサッサとメモリを解放してくれるのが良いところ。
先のグラフは、mod_fastcgi のお陰で、同程度のMunin参照が続いていても、メモリに余裕が増えました。参照者が増えてくると munin.conf で、munin_cgi_graph_jobs の数を制限せざるを得ず(メモリ不足回避のため)、グラフが表示しきるまで重たく、なんとかならないのか???という状況を、一気に解消できました。リソースの厳しい環境にも優しいです(;´Д`)
以下、 mod_fastcgi への導入時メモです。
■mod_fastcgi 導入
mod_fcgid が有効になっている場合は、設定ファイルを別名に保存するなどして、設定を無効化します。mod_fastcgi との並行稼働はできません。
# mv /etc/httpd/conf.d/fcgid.conf /etc/httpd/conf.d/fcgid.conf.orig
あるいは /etc/httpd/conf.d/fcgid.conf を開き、次の行をコメントアウトしておきます。
#LoadModule fcgid_module modules/mod_fcgid.so
次に、mod_fastcgi のセットアップです。repoforge でバイナリが配付されていますので、自分の環境にあったものをダウンロードします。
http://pkgs.repoforge.org/mod_fastcgi/
ダウンロード後は rpm でインストールするだけです。
RHEL5/CentOS5 であれば、次のようにして、セットアップ出来ます。
$ wget http://pkgs.repoforge.org/mod_fastcgi/mod_fastcgi-2.4.6-2.el5.rf.x86_64.rpm # rpm -ivh mod_fastcgi-2.4.6-2.el5.rf.x86_64.rpm 警告: mod_fastcgi-2.4.6-2.el5.rf.x86_64.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6 準備中... ########################################### [100%] 1:mod_fastcgi ########################################### [100%]
設定ファイルを開きます。
vi /etc/httpd/conf.d/fastcgi.conf
ページ中程の、maxClassProcesses が 1 なので、5程度に増やしておきます(設定パラメータについては、こちらに日本語の詳しい解説がありました。)。
FastCgiConfig -idle-timeout 20 -maxClassProcesses 5
そして、Munin の設定を変更します。/etc/httpd/conf.d/munin-cgi.conf などを開き、’SetHandler cgi-script’等の記載があった場所を、次のように書き換えます。
<Directory "/var/www/cgi-bin"> Options +ExecCGI <IfModule mod_fcgid.c> SetHandler fcgid-script </IfModule> <IfModule mod_fastcgi.c> SetHandler fastcgi-script </IfModule> <IfModule !mod_fastcgi.c> <IfModule !mod_fcgid.c> SetHandler cgi-script </IfModule> </IfModule> </Directory>
※参考 CgiHowto2 http://munin-monitoring.org/wiki/CgiHowto2
最後に、Apache の再起動を行えば、設定が反映されます。
# /sbin/service httpd restart
ちなみに、mod_fastcgi に変えたからといって、画像生成そのものが早くなる訳ではないようです(munin-cgi-graph.log より)。どちらかというと、メモリが足りない環境で動的生成している場合、処理が終わればメモリを解放してくれるため、サーバリソースが有効に使えるのではないかと思います(;´Д`)
■2013/07/05 9:23 追記 @mikeda さん、URLと誤記のご指摘ありがとうございましたヽ(・∀・)ノ