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!

Like this? Share it with your network

Share

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

on

  • 1,403 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,403
Views on SlideShare
1,403
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 Presentation Transcript

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