Your SlideShare is downloading. ×
Webサーバ勉強会#1_prefork_8-15
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

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

1,229
views

Published on

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>

Published in: Technology, News & Politics

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. 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 個の割合で新しい子プロセスを生成可能 アイドル状態の 子プロセス数は5個に なっています。 つまり、起動時2個 => 5個に 増えている事が分かります (続きます) 試しに StartServers 2 (つまり、アイドルプロセスが2個) で立ち上げてみます。 この時、 MinSpareServers 5にしておきます。
  • 5. (続き) 次に、無限ループな処理が続くプログラムを公開ページに設置し、 アイドルプロセスが一個減るように仕向けてみます。 アイドル状態の子プロセスは 5個 次に、プログラムの設置してあるURIへリクエストを投げます。 (test.phpは無限ループ処理が発生するプログラムです) 確認してみます やはり、アイドル状態の 子プロセスは5個です 最初の状態は以下です 1つ、Run状態のプロセスが ありますが…
  • 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> おわり ご清聴ありがとうございました