LoginSignup
8
7

More than 5 years have passed since last update.

Apache MaxRequestsPerChild とは

Posted at

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と生成が発生しその処理がサーバ負荷となることもある。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7