ちょっと調べてみたのでメモ。
計算式
phpの[memory_limit]値 x apacheの[MaxClients]値
phpの[memory_limit]値は、php.ini内で設定できる。
PHP: コア php.ini ディレクティブに関する説明 - Manual
次にapacheの[MaxClients]値について、
MaxClients ディレクティブ
- 説明:リクエストに応答するために作成される子プロセスの最大個数
- 構文:MaxClients number
- デフォルト:詳細は使用法をご覧下さい。
- コンテキスト:サーバ設定ファイル
- ステータス:MPM
- モジュール:beos, prefork, worker
MaxClients ディレクティブは、 応答することのできる同時リクエスト数を設定します。 MaxClients 制限数を越えるコネクションは通常、 ListenBacklog ディレクティブで設定した数までキューに入ります。 他のリクエストの最後まで達して子プロセスが空くと、 次のコネクションに応答します。
スレッドを用いないサーバ (すなわち prefork) では、MaxClients は、リクエストに応答するために起動される 子プロセスの最大数となります。 デフォルト値は 256 で、これを増加させたい場合は、 ServerLimit の値も増加させる必要があります。
スレッドを用いるサーバや、ハイブリッドサーバ (すなわち beos worker) では、MaxClients は、クライアントに応答できるスレッドの総数を制限します。 beos でのデフォルト値は 50 です。 ハイブリッド MPM でのデフォルト値は 16 ServerLimit の 25 倍 (ThreadsPerChild) です。 MaxClients を 16 プロセス以上必要な値まで増加させたい場合は、 ServerLimit も増加させる必要があります。
なるほど、ってことで現状を把握するために数値が必要なので、Apache Bench[ab]ツールを使用する。
@IT:Apacheパフォーマンス・チューニングのポイント(2/2)
これで、メモリの最大容量が算出されるけど、kernel、php以外のアプリ(データベース、メールサーバ等)も当たり前だけどメモリを使用しているわけで、実装メモリからマージンを取って考えることになり、重い処理をphpで行うのであれば、別のphp.iniを読み込ませてコマンドライン(CLI)で実行すればいいって結論。後は、予算でサーバ構成考えたりするわけで、結局どちらの値もデフォルトの値に近い数値になるのかと・・・
おしまい。