0
prefork 設定について
8 <IfModule prefork.c>
9 StartServers 8
10 MinSpareServers 5
11 MaxSpareServers 20
12 ServerLimit 256
13 Ma...
line 8 : <IfModule prefork.c>
・prefork.cが組み込まれていれば、
<IfModule> 〜 </IfModule>間で囲われた部分の
ディレクティブが処理される
・/etc/sysconfig/httpd ...
line 9: StartServers
・起動時に生成される”子サーバプロセス数”
デフォルト値のまま起動してみます。
デフォルトは、
StartServers 8なので、
8個立ち上がっています
試しに変更して起動します( StartSer...
line 10: MinSpareServers
・アイドル(リクエストを扱っていない)プロセスの最小個数を設定する
・親プロセスは最高で 1 秒につき 1 個の割合で新しい子プロセスを生成可能
アイドル状態の
子プロセス数は5個に
なっていま...
(続き)
次に、無限ループな処理が続くプログラムを公開ページに設置し、
アイドルプロセスが一個減るように仕向けてみます。
アイドル状態の子プロセスは
5個
次に、プログラムの設置してあるURIへリクエストを投げます。
(test.phpは無限ル...
line 11: MaxSpareServers
・アイドル状態の子サーバプロセスの、最大個数を設定する
・MaxSpareServers よりも多い数の子プロセスがアイドルだと、 親プロセスは超過分を killする
(MinSpareServ...
(続き)
子プロセスが増えました。RunとSleepが入り混じっている状態です
クライアント側のリクエストをkillします。(無限ループ処理へのリクエストを停止)
すると、Sleep(アイドル)のプロセスが増えるはずですが、、実際は8個となって...
line 12: ServerLimit
・line 13のMaxClientsに設定可能な、上限値を設定する。
・必要以上に大きな値に設定された場合は、
余計な未使用共有メモリが割り当てられてしまうので注意
line 13: MaxClients 256
・応答可能な同時リクエスト数を設定する
・MaxClients 制限数を越えるコネクションは、
ListenBacklog ディレクティブで設定した数までキューに入る
・子プロセスが空くと、 次の...
(続き)
先程と同じ無限ループ処理が続くURIへ、
15個のリクエストを投げます。この値は MaxClients(今回は10を設定)を超えています。
子プロセスは10個までしか
生成されません。
個プロセスの生成が制限されている事が分かります。
line 14: MaxRequestsPerChild
・個々の子サーバプロセスが扱うことのできる、リクエストの制限数を設定する。
この数のリクエスト後に、子プロセスが終了する。
・制限する理由は以下二つ
1. メモリーリークが起こった場合に...
(続き)
ひとまず、index.htmlに3回リクエストを投げてみます。
pidに変化は見られません
再度、3回リクエストを投げてみます
まだpidに変化は見られません
(続きます)
(続き)
さらに、3回リクエストを投げてみます (計9回!)
pidが変わりました
今回は、 MaxRequestsPerChild を3にして、子プロセス数の数も3にしていました。
よって、計9回のリクエストを投げた事により、それぞれの個プロ...
line 14 : </IfModule>
おわり
ご清聴ありがとうございました
Upcoming SlideShare
Loading in...5
×

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

1,273

Published on

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>

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,273
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×