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

More Related Content

What's hot

第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会Takahashi Tomohiko
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介Akihiro Kuwano
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeKouhei Maeda
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会Takahashi Tomohiko
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方 Nagi Teramo
 
トラコン問題解説
トラコン問題解説トラコン問題解説
トラコン問題解説michiaki ito
 
Windowsでも使えるシェル
Windowsでも使えるシェルWindowsでも使えるシェル
Windowsでも使えるシェルTetsuya Hasegawa
 
誰得コマンド&オプション35連発
誰得コマンド&オプション35連発誰得コマンド&オプション35連発
誰得コマンド&オプション35連発Yozo SATO
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会Tatsuhiko Kubo
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。Kouhei Maeda
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012Tatsuhiko Kubo
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOKohei Noda
 
ガイアが黒い画面にもっと輝けと囁いている
ガイアが黒い画面にもっと輝けと囁いているガイアが黒い画面にもっと輝けと囁いている
ガイアが黒い画面にもっと輝けと囁いているAya Komuro
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについてMasahiro Saito
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸Takahiro Iwase
 
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvpsはじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvpsAtsuhiro Takiguchi
 

What's hot (20)

Hello, systemd
Hello, systemdHello, systemd
Hello, systemd
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会
 
Open VZ
Open VZOpen VZ
Open VZ
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free life
 
SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
 
トラコン問題解説
トラコン問題解説トラコン問題解説
トラコン問題解説
 
Windowsでも使えるシェル
Windowsでも使えるシェルWindowsでも使えるシェル
Windowsでも使えるシェル
 
誰得コマンド&オプション35連発
誰得コマンド&オプション35連発誰得コマンド&オプション35連発
誰得コマンド&オプション35連発
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
 
Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
 
ガイアが黒い画面にもっと輝けと囁いている
ガイアが黒い画面にもっと輝けと囁いているガイアが黒い画面にもっと輝けと囁いている
ガイアが黒い画面にもっと輝けと囁いている
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについて
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvpsはじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvps
 

Viewers also liked

Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at NetflixConfiguration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at NetflixJustin Ryan
 
DevOps Practices: Configuration as Code
DevOps Practices:Configuration as CodeDevOps Practices:Configuration as Code
DevOps Practices: Configuration as CodeDoug Seven
 
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門kk_Ataka
 

Viewers also liked (7)

Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at NetflixConfiguration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
 
入門Ansible
入門Ansible入門Ansible
入門Ansible
 
DevOps Practices: Configuration as Code
DevOps Practices:Configuration as CodeDevOps Practices:Configuration as Code
DevOps Practices: Configuration as Code
 
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門
 

More from oranie Narut

Devsumi2019 dynamodb
Devsumi2019 dynamodbDevsumi2019 dynamodb
Devsumi2019 dynamodboranie Narut
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talksoranie Narut
 
cassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationcassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationoranie Narut
 
Webサーバ勉強会#5
Webサーバ勉強会#5Webサーバ勉強会#5
Webサーバ勉強会#5oranie Narut
 
Webサーバ勉強会#4
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4oranie Narut
 
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5 MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5 oranie Narut
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03oranie Narut
 
財務分析勉強会挨拶
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶oranie Narut
 
Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料oranie Narut
 
It勉強会の勉強会
It勉強会の勉強会It勉強会の勉強会
It勉強会の勉強会oranie Narut
 

More from oranie Narut (11)

Devsumi2019 dynamodb
Devsumi2019 dynamodbDevsumi2019 dynamodb
Devsumi2019 dynamodb
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
 
cassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationcassandra 100 node cluster admin operation
cassandra 100 node cluster admin operation
 
Fluentd casual
Fluentd casualFluentd casual
Fluentd casual
 
Webサーバ勉強会#5
Webサーバ勉強会#5Webサーバ勉強会#5
Webサーバ勉強会#5
 
Webサーバ勉強会#4
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4
 
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5 MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
 
財務分析勉強会挨拶
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶
 
Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料
 
It勉強会の勉強会
It勉強会の勉強会It勉強会の勉強会
It勉強会の勉強会
 

Webサーバ勉強会02

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