Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Webサーバ勉強会02

3,348 views

Published on

  • Be the first to comment

Webサーバ勉強会02

  1. 1. Web サーバ勉強会 #2 発表資料
  2. 2. 自己紹介 <ul><li>id:oranie  </li></ul><ul><li>@oranie </li></ul><ul><li>渋谷の緑色のグループ会社で、グループ内でも余り知られていないシステムでなんか色々やる簡単なお仕事しています。 </li></ul><ul><li>緑色のみんながよく知っているサービスの裏側とかは全く知らないですw </li></ul>
  3. 3. 担当範囲: prefork チューニング <ul><li>主な内容 </li></ul><ul><li>そもそもチューニングとはなんなのさ? </li></ul><ul><li>じゃあ、実際 prefork ではどうするのさ? </li></ul>
  4. 4. チューニングとは 信頼の wikipedia で調べると チューニング (tuning) とは、「調律・同調する」の意味を持つ英語。 * 音楽において、楽器の音の高さを合わせること。調律。および転じて高さが合った状態のこと。 * 無線送受信機において、電波の周波数を合わせること。 * 機械に手を加え、目的とする状態に調整すること。 チューンアップ・チューンナップともいう。しばしば改造(カスタム)と同義として扱われるが、本来は「チューニング」という単語に「改造」という意味は無い。 o 自動車においてはチューニングカーを参照。 * シンクロ召喚を行うこと。 ←遊戯王カードの用語みたいです。
  5. 5. チューニングとは② サーバでのチューニングの場合は 「手を加え、目的とする状態に調整すること。」 が適切。 なので、何が目的かを考えて手を加えることが重要。 Apache の場合は ・スループットの向上(大量アクセスへの対応) ・レスポンスの向上(ユーザへのストレス軽減) ・リソース効率の向上 (省リソース、低スペックサーバでの運用や逆に高スペックサーバに適した運用、他のアプリが同居しているなど) 辺りが良くある目的?
  6. 6. prefork のチューニング目的 config 等については Web サーバ勉強会 1 回 @mashan さんの資料より。 8 <IfModule prefork.c> 9 StartServers 8 10 MinSpareServers 5 11 MaxSpareServers 20 12 ServerLimit 256 13 MaxClients 256 14 MaxRequestsPerChild 4000 15 </IfModule> prefork は、あらかじめ子プロセスをいくつか起動しておいて 直ぐにリクエストに応答できるようにする方式 リクエストを受け付けるプロセス数の制御なので、主に ・スループットの向上(大量アクセスへの対応) となる。
  7. 7. prefork のチューニング① まずはデフォルトの意味を理解する。 8 <IfModule prefork.c> 9 StartServers 8-> サーバ起動時の子プロセス数を 8 つに設定する 10 MinSpareServers 5-> ・アイドル ( リクエストを扱っていない ) プロセスの最小個数を 5 つに設定する 11 MaxSpareServers 20-> ・アイドル ( リクエストを扱っていない ) プロセスの最大個数を 20 に設定する 12 ServerLimit 256-> 最大で子プロセスを 256 まで生成する 13 MaxClients 256-> 最大でリクエストを 256 まで同時に受け付ける 14 MaxRequestsPerChild 4000->4000 リクエストを処理したプロセスは殺す 15 </IfModule> となる。なので、単純に考えると 12 ServerLimit 256-> 最大で子プロセスを 256 まで生成する 13 MaxClients 256-> 最大でリクエストを 256 まで同時に受け付ける をいじれば受信出来るリクエスト数は多くなるから最大スループットは向上する?
  8. 8. prefork のチューニング② じゃあ、 12 ServerLimit 10000 13 MaxClients 10000 とかにしたら同時 1 万リクエストを 1 台のサーバで処理出来て 最強wwwwwwうはwwwwクラウドとかいらないwwwwwwwwwww -> そんな訳は無い。 プロセスを生成するにはコストが掛かる。->主にメモリ クライアントからのリクエストを正常に受信出来るか?->主にネットワークスループットなど 受信したリクエストを各プロセスが正常に処理出来るか->主に CPU は別問題。元々のサーバ性能を超えて apache の設定を行っても意味が無い。 上記みたいに 10000 とか設定すると、 10000 プロセス生成するメモリ、 10000 リクエストを受信出来る ネットワーク性能、 10000 リクエストを同時に処理出来る CPU 性能などなどが必要で、どれか欠けても狙った性能は出ない。
  9. 9. prefork のチューニング③ 例えるなら
  10. 10. prefork のチューニング④ でも・・・・
  11. 11. prefork のチューニング⑤ サーバ HW 仕様と合わせて、 OS で利用しているリソースや他のアプリ等で使用するリソース等と 含めて、残りが apache で利用出来る分と見極め逆算して考えた方が早いかも。 この辺はサーバの特性にも関わるので、内部処理の把握+経験+測定で効率の良い方法を探してくださいw 例として・・・ ① ab 等で想定しているシナリオ負荷を掛けて見る。若しくは運用している時のピークで。 ② レスポンス結果、 OS 、プロセス状況を見る。 CPU とかは問題無いけど、 apache レベルで同時リクエストを捌けていなければ次へ。 CPU とかがそもそも限界なら、むしろ同時接続数下げましょう。 安定運用大事です。 OS 落ちたら意味無いです。 ③ 1 プロセス辺りの消費メモリを見る。(平均値や中央値じゃなくて MAX 値で) ④ HW に搭載しているメモリ -(OS 等で使用しているメモリ + 他のアプリで使用しているメモリ使用量 + 本来のバッファ分と余裕という意味のバッファ分 ) =apache に割り当てても良いリソース量の目安 ⑤ apache に割り当てても良いリソース量 ÷1 プロセス辺りの消費メモリ = ServerLimit 、 MaxClients に割り当てる事が出来る数値 という形で当たり付けをして、また負荷掛ける->計測して問題が無いか、狙った性能が出るかをチェックする。
  12. 12. prefork のチューニング⑥ VPS 使って⑤の簡単な実演をします。 ( pmap 見たり、 ps 見たり、 ab 掛けたりしました。)
  13. 13. 最後に まずは挙動を把握して推測->測定->修正->運用->測定->修正というのが一番の近道だと思います。 SBR でジャイロも 「いつも最短の近道を試みたが『 一番の近道 は遠回りだった』 『遠回りこそが俺の最短の道だった』 」って言っています。 なので、検証環境での結果だけでカリカリにチューニングすると実運用時に困る事が多いので、あくまでも程々にして、余裕を持った本番運用を行いしっかり監視して、少しづつ最適値を探りましょう。 あと、むやみに長時間検証するぐらいなら規模や仕様やお金にもよりますが、サーバ追加した方が早( ry 以上

×