mod_fcgidによるメモリ使用量を制限して、少ないメモリで稼働させる

シェアする

Voiced by Amazon Polly

mod_fcgidを使用すると、PHPをCGIとして動作させることができ、またプロセスを常駐させることで多数のリクエストを効率的に捌くことが可能です。
しかし、デフォルトではかなりの量のメモリを使用するようになっているため、初期設定のまま使用するとサーバーのメモリを食い尽くしてしまう恐れがあります。
メモリ使用量の少ないサーバーでは、次のような設定を行うことでプロセス数を抑制し、メモリ使用量を制限することができます。

広告



グローバルレベルの設定

サーバー全体で適用する設定です。次は、その代表的な設定を記載します。
詳細については、https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.htmlを参照してください。
/etc/httpd/conf.modules.d/10-fcgid.confに次の内容を記載します。
<IfModule mod_fcgid.c>
MaxProcessCount 1000
DefaultMaxClassProcessCount 100
DefaultMinClassProcessCount 3
MaxRequestsPerProcess 0
IdleTimeout 300
ProcessLifeTime 3600
IdleScanInterval 120
</IfModule>

MaxProcessCount

当該サーバー上で起動可能なphp-cgiプロセス数を制限します。
バージョンが異なっていても、CGIモードで起動されるPHPのプロセス数は合算してカウントされます。デフォルト値は1000です。

DefaultMaxClassProcessCount

後述の、バーチャルホスト単位で起動される最大プロセス数のデフォルト値を設定します。バーチャルホスト単位での設定が行われていない場合は、この設定値が適用されます。デフォルト値は100です。

DefaultMinClassProcessCount

後述の、バーチャルホスト単位で常に起動状態となるプロセス数のデフォルト値を設定します。バーチャルホスト単位での設定が行われていない場合は、この設定値が適用されます。
後述のIdleTimeout、ProcessLifeTimeを超過した場合にプロセスが終了しますが、その時でも残しておくプロセス数を指定します。デフォルト値は3です。

MaxRequestsPerProcess

指定されたリクエスト数を処理した際に、php-cgiプロセスを再起動します。メモリリークを防ぐのに有用ですが、あまりにも小さな値を設定すると再起動が頻繁にかかり、パフォーマンスが低下します。0または-1を指定するとリクエスト数による再起動処理は行われません。デフォルト値は0です。

IdleTimeout

php-cgiプロセスがアイドル状態(待機中)でいられる時間を秒単位で指定します。あまりにも小さな値を指定すると、プロセスが頻繁に終了されパフォーマンスが低下します。デフォルト値は300(5分)です。

ProcessLifeTime

当該プロセスが存在できる時間を秒単位で制限します。デフォルト値は3600(1時間)です。

IdleScanInterval

アイドル状態のプロセスをチェックする間隔を秒単位で指定します。チェック時にIdleTimeoutで指定された秒数以上のアイドル状態なプロセス、ProcessLifeTimeを超えて存在するプロセスがある場合は、終了されます。あまりにも小さな値を指定すると、スキャン頻度が高まりパフォーマンスが低下します。デフォルト値は120(2分)です。