【Munin】mod_fcgidからmod_fastcgiに切り替え、負荷軽減

【Munin】mod_fcgidからmod_fastcgiに切り替え、負荷軽減 はてなブックマーク - 【Munin】mod_fcgidからmod_fastcgiに切り替え、負荷軽減


私がMuninを動的生成に切り替えて困った事。それは、サーバの慢性的なメモリ不足でした。公式ドキュメントに書かれている方法や、yum で munin-cgi パッケージを導入すると、mod_fcgid を使った動的生成になります。

mof_fastcgi の設定方法は、ページ後半をご覧下さい。

この mod_fcgid は、確かに描画は高速かもしれませんが、そのためには潤沢なメモリリソースが必要になります。(私が使っているような)貧弱な環境では、mod_fastcgi を使う事で、比較的メモリに余裕が増えました。

画面左側が mod_fcgid を使っていた時、mof_fastcgi 導入後は物理メモリに余裕が出てきている。

■ mod_fcgid と mod_fastcgi は別モノ

まず、それぞれが別のモジュールという点に注意してください。どちらも FastCGI プロトコルを扱い、メモリ空間中に常駐することでウェブサーバのレスポンスを向上させる働きがあります。しかし、実装方法や設定方法は異なります。

※ mod_fcgid は、Apache プロジェクト で開発が進んでいるものです。一方、元々の FastCGI の思想で設計されたモジュールが mod_fastcgi です。名前は似ていますが、別モノですよ、と。

Load Average の推移(ZABBIXで取得)を見ても、導入後(PM 5:00~) は、負荷が極端に上がることはなくなりました。

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と誤記のご指摘ありがとうございましたヽ(・∀・)ノ