MaxRequestsPerChild
ある回数のリクエストを処理した子プロセスを殺す設定。
以下はてきとー。
httpd.conf
<IfModule prefork.c>
StartServers 30
MinSpareServers 30
MaxSpareServers 30
ServerLimit 30
MaxClients 30
MaxRequestsPerChild 128
</IfModule>
Copy on Write
prefork(子プロセス)を使用する場合、親子間でメモリを共有するCopy on Writeが使用される。
fork直後は親と子が同じ物理メモリを共有しているため実際にメモリが使用されるまでメモリ使用率は上がらない。
時間経過(アクセス)で親と子のメモリ共有率が下がっていく。
= メモリ使用率が上がる。
MaxRequestsPerChild
MaxRequestsPerChild は一定数の接続を受け取った後、子プロセスを殺す。
この時上記のような設定なら128回リクエスト処理を行った子プロセスは殺され、その際子プロセスは必ず30用意されるため、新たに生成される。
killされた際に子が使用していたメモリが開放され、親とメモリ空間を共有したプロセスが生成される。
結果、メモリ使用率を下げる事ができる。
mod_perlやmod_phpが起こしたメモリリークを解消する事もできる。
余談
大規模サイトだと小さい値にすると頻繁にプロセスのkillと生成が発生しその処理がサーバ負荷となることもある。