2014年7月1日火曜日

Apacheプロセス数の設定

Apache Preforkにおいて、
StartServers 64
MinSpareServers 32
MaxSpareServers 128
MaxClients 256

上記設定の場合、
  • Apache起動時に64の子プロセスをfork。
  • 子プロセスの処理回数がMaxRequestsPerChildに達するとkill。
  • BUSY子プロセスが増え、IDLE子プロセスが32より少なくなると、新たに子プロセスをfork。(forkによりCPU使用率増、メモリ使用量増)
  • 子プロセス数forkの上限は256
  • Busy子プロセスが減り、IDLE子プロセス数が128よりも多い場合、子プロセスをkill。(メモリ使用量減)
という動きをしますが(必要に応じて余剰子プロセスをfork&killする)
以下のように全て同一値にすることで、子プロセス数が一定(256)に保たれます。
StartServers 256
MinSpareServers 256
MaxSpareServers 256
MaxClients 256

上記設定にすると、
  • Apache起動時に256の子プロセスをfork。
  • 子プロセスの処理回数がMaxRequestsPerChildに達するとkillされ、新たにfork。
  • MinSpareServers MaxSpareServersによる余剰子プロセスのfork&killがない。(CPU消費が少ない)
  • 子プロセス数が一定に保たれる。(メモリ使用量もほぼ一定)
となります。

Apache起動時にCPU使用率が高くなるとか、アクセス数少ないときのメモリ消費が
勿体無いとかありますが、1プロセスの最大メモリ使用量を計測し、メモリ不足しない
範囲でプロセス数を設定しておけば、ピーク時にSWAPする心配もありません。

ちなみに子プロセスのメモリ使用量は、以下の手順で確認できます。

1. pid と RSS を確認
# ps aux|grep -v Ss|grep 'httpd' | sort -n -k 6

2. 他プロセスとCopy on Write(CoW)で共有しているメモリサイズを確認
# cat /proc/$pid/smaps | grep  Shared_ | awk '{ print $2 }' | grep -v "0$"

3. RSSから共有メモリを減算。

0 件のコメント: