Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Webサーバ勉強会#1_prefork_8-15

on

  • 1,378 views

Apache Config ...

Apache Config
preforkについて
8 <ifmodule>
9 StartServers 8
10 MinSpareServers 5
11 MaxSpareServers 20
12 ServerLimit 256
13 MaxClients 256
14 MaxRequestsPerChild 4000
15 </ifmodule>

Statistics

Views

Total Views
1,378
Views on SlideShare
1,378
Embed Views
0

Actions

Likes
1
Downloads
18
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Webサーバ勉強会#1_prefork_8-15 Webサーバ勉強会#1_prefork_8-15 Presentation Transcript

  • Webサーバ勉強会 #1 prefork 設定について 8 <IfModule prefork.c> 9 StartServers 8 10 MinSpareServers 5 11 MaxSpareServers 20 12 ServerLimit 256 13 MaxClients 256 14 MaxRequestsPerChild 4000 15 </IfModule> @mashan (ネット広告代理店でインフラエンジニアしています)
  • line 8 : <IfModule prefork.c> ・prefork.cが組み込まれていれば、 <IfModule> 〜 </IfModule>間で囲われた部分の ディレクティブが処理される ・/etc/sysconfig/httpd 内において HTTPD= が特別設定されていない場合は、 preforkでApacheプロセスが起動する。(デフォルト) ・ちなみにpreforkは、あらかじめ子プロセスをいくつか起動しておいて 直ぐにリクエストに応答できるようにする方式
  • line 9: StartServers ・起動時に生成される”子サーバプロセス数” デフォルト値のまま起動してみます。 デフォルトは、 StartServers 8なので、 8個立ち上がっています 試しに変更して起動します( StartServers 5 へ) 5個に減りました
  • line 10: MinSpareServers ・アイドル(リクエストを扱っていない)プロセスの最小個数を設定する ・親プロセスは最高で 1 秒につき 1 個の割合で新しい子プロセスを生成可能 試しに StartServers 2 (つまり、アイドルプロセスが2個) で立ち上げてみます。 この時、 MinSpareServers 5にしておきます。 アイドル状態の 子プロセス数は5個に なっています。 つまり、起動時2個 => 5個に 増えている事が分かります (続きます)
  • (続き) 次に、無限ループな処理が続くプログラムを公開ページに設置し、 アイドルプロセスが一個減るように仕向けてみます。 最初の状態は以下です アイドル状態の子プロセスは 5個 次に、プログラムの設置してあるURIへリクエストを投げます。 (test.phpは無限ループ処理が発生するプログラムです) 確認してみます 1つ、Run状態のプロセスが ありますが… やはり、アイドル状態の 子プロセスは5個です
  • line 11: MaxSpareServers ・アイドル状態の子サーバプロセスの、最大個数を設定する ・MaxSpareServers よりも多い数の子プロセスがアイドルだと、 親プロセスは超過分を killする (MinSpareServers よりも小さい値に設定した場合、MinSpareServers +1 に自動調整される) MaxSpareServers を8にしての検証を行います 最初は5個の子プロセスが立ち上がっています 10個のリクエストを同時に処理させます。(先程と同様test.phpは無限ループ処理です) (続きます)
  • (続き) 子プロセスが増えました。RunとSleepが入り混じっている状態です クライアント側のリクエストをkillします。(無限ループ処理へのリクエストを停止) すると、Sleep(アイドル)のプロセスが増えるはずですが、、実際は8個となっています。 MaxSpareServersの働きで、超過分がkillされた事が分かります。
  • line 12: ServerLimit ・line 13のMaxClientsに設定可能な、上限値を設定する。 ・必要以上に大きな値に設定された場合は、 余計な未使用共有メモリが割り当てられてしまうので注意
  • line 13: MaxClients 256 ・応答可能な同時リクエスト数を設定する ・MaxClients 制限数を越えるコネクションは、 ListenBacklog ディレクティブで設定した数までキューに入る ・子プロセスが空くと、 次のコネクションに応答する では、MaxClientsを10にして検証してみます (続きます)
  • (続き) 先程と同じ無限ループ処理が続くURIへ、 15個のリクエストを投げます。この値は MaxClients(今回は10を設定)を超えています。 子プロセスは10個までしか 生成されません。 個プロセスの生成が制限されている事が分かります。
  • line 14: MaxRequestsPerChild ・個々の子サーバプロセスが扱うことのできる、リクエストの制限数を設定する。 この数のリクエスト後に、子プロセスが終了する。 ・制限する理由は以下二つ 1. メモリーリークが起こった場合に プロセスが消費するメモリの総量を制限できる 2. プロセスに有限のライフタイムを設定することで、 サーバ負荷が下がった時にプロセス数を 少なくすることができる では、MaxRequestsPerChild を3にして検証してみます。(便宜上 MaxClientsも3にしました) 初期のpidは上記の値です。 (続きます)
  • (続き) ひとまず、index.htmlに3回リクエストを投げてみます。 pidに変化は見られません 再度、3回リクエストを投げてみます まだpidに変化は見られません (続きます)
  • (続き) さらに、3回リクエストを投げてみます (計9回!) pidが変わりました 今回は、 MaxRequestsPerChild を3にして、子プロセス数の数も3にしていました。 よって、計9回のリクエストを投げた事により、それぞれの個プロセスが 生まれ変わった事が分かります
  • line 14 : </IfModule> おわり ご清聴ありがとうございました