SlideShare a Scribd company logo
中小規模サービスの
Apacheチューニング
株式会社スピカ
國府田勲
Copyright © Spika Inc. 2016 all rights reserved.
2
自己紹介
國府田勲
株式会社スピカ
代表取締役
インフラエンジニア
数百万人 数千万人 100万人
http://qiita.com/kou
Copyright © Spika Inc. 2016 all rights reserved.
1. はじめに
– 前提となるシステム構成
2. チューニングの進め方
– 監視の実施
– ボトルネックの調査
– チューニングの実施
3. チューニング事例
– 初期設定
– 個別設定
4. 質疑応答
3
アジェンダ
Copyright © Spika Inc. 2016 all rights reserved.
1. はじめに
4
Copyright © Spika Inc. 2016 all rights reserved.
• 前提となるシステム構成
–OS
• Linux
–Apache
• バージョン 2.2
• 動作モード prefork MPM
–構成
• WEBサーバ1-2台程度
• データベース1台
5
1. はじめに
WEBサーバ
DBサーバ
Copyright © Spika Inc. 2016 all rights reserved.
2. チューニングの進め方
6
Copyright © Spika Inc. 2016 all rights reserved.
7
2. チューニングの進め方
Plan
Do
Check
Action
Plan
監視しボトルネック箇所を特定する
Do
チューニングを実施する
Check
改善したか確認する
Action
改善していなければ再度実施
チューニングもPDCAが重要
Copyright © Spika Inc. 2016 all rights reserved.
• 監視の目的
– ベースラインの確立
– 性能劣化の検知
– ボトルネックの大まかな特定
– チューニング結果の確認
8
2. チューニングの進め方 / 監視の実施
定常的な監視を行う
Copyright © Spika Inc. 2016 all rights reserved.
• 監視項目
– ネットワークの利用状況
– システムの利用状況
– プロセスの利用状況
– アプリケーションの応答・処理時間
9
2. チューニングの進め方 / 監視の実施
Copyright © Spika Inc. 2016 all rights reserved.
• 死活監視とリソース監視の両方が統合されて
いる
• 保持されるデータ期間が比較的長いこと
• 日付・時間を指定して動的なグラフ作成がで
きること
10
2. チューニングの進め方 / 監視の実施
チューニングの観点からみた
監視ツール選択のポイント
Copyright © Spika Inc. 2016 all rights reserved.
DIY型
SaaS型
11
2. チューニングの進め方 / 監視の実施
Copyright © Spika Inc. 2016 all rights reserved.
12
2. チューニングの進め方 / 監視の実施
Copyright © Spika Inc. 2016 all rights reserved.
• 各種ログのチェック
– エラーや設定上限値に関する情報が出力されていないか
確認する
• モニタリングコマンドの実行
– vmstat
– free
– top など
13
2. チューニングの進め方 / ボトルネックの調査
監視ツールで大まかな傾向を把握し
詳細はサーバ上で確認する
Copyright © Spika Inc. 2016 all rights reserved.
14
2. チューニングの進め方 / ボトルネックの調査
vmstatのチェックポイント
[kouda@nb-app]~% vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0
0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0
0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0
0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0
2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0
1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0
1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0
procsチェックポイント
• rがCPUコア数以上
• 何らかの理由で処理待ちが発生している
• bが発生している
• ディスクやネットワークのI/O待ちがある
• ファイル書き込みや外部DBへの問い合わせ待ちがないか
確認
Copyright © Spika Inc. 2016 all rights reserved.
15
2. チューニングの進め方 / ボトルネックの調査
vmstatのチェックポイント
[kouda@nb-app]~% vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0
0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0
0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0
0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0
2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0
1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0
1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0
swapチェックポイント
• si/soで数値が出力されている
• swapが発生しているのでメモリ増設が必要
Copyright © Spika Inc. 2016 all rights reserved.
16
2. チューニングの進め方 / ボトルネックの調査
vmstatのチェックポイント
[kouda@nb-app]~% vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0
0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0
0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0
0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0
2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0
1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0
1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0
cpuチェックポイント
• us+syの数値が100近い
• CPUが性能限界
• waの数値が大きい
• ディスクやネットワークでのI/O待ちが発生している
Copyright © Spika Inc. 2016 all rights reserved.
17
2. チューニングの進め方 / ボトルネックの調査
freeのチェックポイント
bash-4.2# free -m
total used free shared buffers cached
Mem: 1997 1153 844 158 53 933
-/+ buffers/cache: 167 1830
Swap: 964 0 964
チェックポイント
• buffers/cacheのfreeが0に近い
• 利用できる残りのメモリ量が少ない
Copyright © Spika Inc. 2016 all rights reserved.
• mod_statusの確認
– Apacheに用意されているモニタリングモジュール
– Apacheのプロセスの稼働状況をモニタリングすることがで
きます
18
2. チューニングの進め方 / ボトルネックの調査
Copyright © Spika Inc. 2016 all rights reserved.
19
2. チューニングの進め方 / ボトルネックの調査
# mod_statusモジュールを有効にする
LoadModule status_module modules/mod_status.so
# 詳細情報出力オプション(デフォルトOff)
ExtendedStatus On
# ハンドラー設定
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .your.office
</Location>
mod_status有効化
Copyright © Spika Inc. 2016 all rights reserved.
20
2. チューニングの進め方 / ボトルネックの調査
Copyright © Spika Inc. 2016 all rights reserved.
21
2. チューニングの進め方 / ボトルネックの調査
チェックポイント
• Scoreboardがアルファベット埋め尽くされている
• 接続数に対して子プロセス数が足りていない
mod_statusのチェックポイント
Copyright © Spika Inc. 2016 all rights reserved.
22
2. チューニングの進め方 / チューニングの実施
Apacheチューニングとは効率を高めること
(+)
不足を補う
• CPU割当を増やす
• メモリ割り当てを増やす
(ー)
無駄を減らす
• 使っていないものを省く
• 重要度の低いことはやめ
る
効率を高める方法
Copyright © Spika Inc. 2016 all rights reserved.
• 実施時の注意点
– 同時に複数箇所を変更しない
• 効果の切り分けができないため
– 変更情報は記録しておく
• 後日、統計値と突き合わせて分析する際に必要
– ボトルネックの原因は複合的に発生する
• あるボトルネック箇所をクリアすると、他の部分がボト
ルネックとなる
23
2. チューニングの進め方 / チューニングの実施
Copyright © Spika Inc. 2016 all rights reserved.
24
2. チューニングの進め方 / チューニングの実施
ボトルネックA対策前
ボトルネックA
ボトルネックB
ボトルネックA対策後
ボトルネックBが
顕在化する
目標を達成するまで根気よくやり続ける
Copyright © Spika Inc. 2016 all rights reserved.
3. チューニング事例
25
Copyright © Spika Inc. 2016 all rights reserved.
26
3. チューニング事例
prefork MPMの概要
httpd親プロセス
httpd
子プロセス
httpd
子プロセス
httpd
子プロセス
httpd
子プロセス
親プロセスが子プロセスを管理
1子プロセス1接続を処理
Copyright © Spika Inc. 2016 all rights reserved.
Timeout
説明
• リクエストを受け取ってから処理完了までの待機時
間
• デフォルトは300秒
チューニング方針
• 時間を短くする
• 60秒以下がオススメ
27
3. チューニング事例 / 初期設定
Copyright © Spika Inc. 2016 all rights reserved.
KeepAlive
説明
• 1回のTCP接続で複数のHTTPリクエストを処理する
• デフォルトはOn
チューニング方針
• On/Offはサイト特性による
• OnにするときにもKeepAliveTimeoutや
MaxKeepAliveRequestsを設定する
• AWSのELB配下の場合はOnにする
28
3. チューニング事例 / 初期設定
Copyright © Spika Inc. 2016 all rights reserved.
HostnameLookups
説明
• ログファイルに記録する際に接続元IPアドレスを逆
引きする
• デフォルトはOff
チューニング方針
• Onにしない
• DNSの逆引きは時間がかかる
• どうしてもやりたい場合はlogresolveなどで後で行う
29
3. チューニング事例 / 初期設定
Copyright © Spika Inc. 2016 all rights reserved.
mod_deflate
説明
• HTTPで圧縮転送を行うモジュール
• 適用範囲を指定して利用する
チューニング方針
• テキストコンテンツに適用する
• 画像ファイルには適用しない
• 圧縮率はサーバのCPUリソースと相談して決める
30
3. チューニング事例 / 初期設定
Copyright © Spika Inc. 2016 all rights reserved.
31
3. チューニング事例 / 初期設定
# mod_deflateモジュールを有効にする
LoadModule deflate_module modules/mod_deflate.so
# 圧縮レベル(低圧縮1〜高圧縮9)
DeflateCompressionLevel 5
# 適用コンテンツを指定
AddOutputFilterByType DEFLATE text/html text/plain text/xml
mod_deflate有効化
Copyright © Spika Inc. 2016 all rights reserved.
不要モジュールの削除
説明
• Loadしないことで使用メモリが削減できる
チューニング方針
• 利用していないモジュールを削除する
• LoadModule行をコメントアウト
• ただし、自信がないときは削除しない
32
3. チューニング事例 / 初期設定
Copyright © Spika Inc. 2016 all rights reserved.
33
3. チューニング事例 / 初期設定
削除前
削除後
bash-4.2# ps axu | grep -e RSS -e httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 9 0.0 0.3 121924 6148 ? Ss Nov21 0:02 /usr/sbin/httpd -k start
apache 181 0.0 0.2 121924 5188 ? S 02:14 0:00 /usr/sbin/httpd -k start
apache 182 0.0 0.2 121924 5148 ? S 02:14 0:00 /usr/sbin/httpd -k start
apache 183 0.0 0.2 121924 5376 ? S 02:14 0:00 /usr/sbin/httpd -k start
apache 184 0.0 0.2 121924 5248 ? S 02:14 0:00 /usr/sbin/httpd -k start
bash-4.2# ps axu | grep -e RSS -e httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 9 0.0 0.3 176400 6856 ? Ss Nov21 0:02 /usr/sbin/httpd -k start
apache 10 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 11 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 12 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 13 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
6.1MBから5.2MB程度まで削減
Copyright © Spika Inc. 2016 all rights reserved.
MaxClients/ServerLimit
説明
• サーバプロセスの上限数を設定する
• プロセス数≒最大同時接続数
チューニング方針
• topやpsコマンドなどで使用メモリ量を調査し、大ま
かに決定する
• CPU、メモリ使用量をみながら微調整する
34
3. チューニング事例 / 個別設定
Copyright © Spika Inc. 2016 all rights reserved.
MaxClients数の算出方法
• psコマンドでhttpdの1プロセスあたりのRSS(物
理メモリ使用量)を計測する
• 下記の数式を満たすようにMaxClients数を調
整する
35
3. チューニング事例 / 個別設定
サーバの物理メモリ量>httpd1プロセスあたり
のメモリ使用量×MaxClient数+他のプロセスが
利用するメモリ使用量
Copyright © Spika Inc. 2016 all rights reserved.
36
3. チューニング事例 / 個別設定
bash-4.2# ps axu | grep -e RSS -e httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 9 0.0 0.3 176400 6856 ? Ss Nov21 0:02 /usr/sbin/httpd -k start
apache 10 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 11 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 12 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
apache 13 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start
RSSの数値を確認
KB単位
Copyright © Spika Inc. 2016 all rights reserved.
MinSpareServers/MaxSpareServers
説明
• 待機プロセス数を定義
• Min〜Maxの間となるようにプロセス数が維持される
チューニング方針
• WEB専用サーバであれば
MinSpareServers=MaxSpareServers=MaxClientで良
い
37
3. チューニング事例 / 個別設定
Copyright © Spika Inc. 2016 all rights reserved.
MaxRequestsPerChild
説明
• 子プロセスが処理するリクエスト数
• この数値を超えると子プロセスが終了する
• デフォルト:10000
• 0にすると無制限となる
チューニング方針
• 子プロセスがメモリ肥大化しない場合は0
• 制限値を設定しておくと安心
38
3. チューニング事例 / 個別設定
Copyright © Spika Inc. 2016 all rights reserved.
worker MPMに切り替える
説明
• 各子プロセスがマルチスレッドで処理するため消費
メモリが少なくなる
チューニング方針
• サードパーティーモジュールがスレッドセーフであれ
ば採用
39
3. チューニング事例 / 個別設定
Copyright © Spika Inc. 2016 all rights reserved.
40
3. チューニング事例 / 個別設定
worker MPMの概要
httpd親プロセス
httpd
子プロセス
httpd
子プロセス
httpd
子プロセス
httpd
子プロセス
1子プロセスが複数接続を処理
Copyright © Spika Inc. 2016 all rights reserved.
Apacheチューニングは万能ではありません
• スケールアップ
• スケールアウト
• アプリケーション側のチューニング
などの手段を検討しましょう
41
最後に
どうしても目標が満たせない場合
Copyright © Spika Inc. 2016 all rights reserved.
42
エンジニア募集中
エンジニア募集中!
あらゆるジャンルで募集してます
詳細はWantedlyで
https://www.wantedly.com/companies/spika/info

More Related Content

PDF
これからSpringを使う開発者が知っておくべきこと
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
Apache Spark の紹介(前半:Sparkのキホン)
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PDF
忙しい人の5分で分かるDocker 2017年春Ver
PPTX
コンテナネットワーキング(CNI)最前線
PDF
イミュータブルデータモデル(入門編)
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
これからSpringを使う開発者が知っておくべきこと
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Apache Spark の紹介(前半:Sparkのキホン)
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
忙しい人の5分で分かるDocker 2017年春Ver
コンテナネットワーキング(CNI)最前線
イミュータブルデータモデル(入門編)
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス

What's hot (20)

PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
PPTX
Azure API Management 俺的マニュアル
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PDF
イミュータブルデータモデル(世代編)
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
そんなトランザクションマネージャで大丈夫か?
PDF
Springを何となく使ってる人が抑えるべきポイント
PPTX
世界一わかりやすいClean Architecture
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
イミュータブルデータモデルの極意
PPTX
Redisの特徴と活用方法について
PPTX
本当は恐ろしい分散システムの話
PPTX
MongoDBが遅いときの切り分け方法
PDF
SQL大量発行処理をいかにして高速化するか
PDF
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
PDF
DBスキーマもバージョン管理したい!
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Azure Api Management 俺的マニュアル 2020年3月版
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
Azure API Management 俺的マニュアル
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
イミュータブルデータモデル(世代編)
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
そんなトランザクションマネージャで大丈夫か?
Springを何となく使ってる人が抑えるべきポイント
世界一わかりやすいClean Architecture
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
イミュータブルデータモデルの極意
Redisの特徴と活用方法について
本当は恐ろしい分散システムの話
MongoDBが遅いときの切り分け方法
SQL大量発行処理をいかにして高速化するか
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
DBスキーマもバージョン管理したい!
Ad

Similar to 中小規模サービスのApacheチューニング (20)

PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PDF
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
PDF
Sparkパフォーマンス検証
PDF
20171206 d3 health_tech発表資料
PDF
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
PDF
自宅サーバーを立てる話
PDF
2015 0228 OpenStack swift; GMO Internet Services
PDF
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
PPT
インフラエンジニアのためのcassandra入門
PPTX
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
PDF
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
PDF
ネットワーク通信入門
PPTX
システムパフォーマンス勉強会#5
PDF
Soft layer network概要_jslug向け
PDF
Riakを利用したパーソナライズ事例
PDF
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
PPTX
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
PDF
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
PDF
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
Sparkパフォーマンス検証
20171206 d3 health_tech発表資料
SAS Visual Analytics 6.3 を使った DELL VRTX の評価
自宅サーバーを立てる話
2015 0228 OpenStack swift; GMO Internet Services
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
インフラエンジニアのためのcassandra入門
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
ネットワーク通信入門
システムパフォーマンス勉強会#5
Soft layer network概要_jslug向け
Riakを利用したパーソナライズ事例
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Ad

More from 勲 國府田 (8)

PPTX
ネイルブックのSNS集客術〜Pinterest・SNS活用事例〜
PDF
逆説のネイルブックSEO 〜完全リニューアルマニュアル〜
PDF
ユーザテストが教えてくれた女ゴコロ〜女性向けサービスの育て方〜
PDF
ネイルブックでのWEB高速化の取り組み
PDF
女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜
PPTX
Tech valley #5 株式会社スピカご紹介
PPTX
ネイルブックでのGoogle Play ASOについて
PDF
SSDとTokyoTyrantやMySQLの性能検証
ネイルブックのSNS集客術〜Pinterest・SNS活用事例〜
逆説のネイルブックSEO 〜完全リニューアルマニュアル〜
ユーザテストが教えてくれた女ゴコロ〜女性向けサービスの育て方〜
ネイルブックでのWEB高速化の取り組み
女性向けサービスでコンバージョン数を爆上げさせた話 〜ネイルブックが1年間でCV数を69倍にした方法〜
Tech valley #5 株式会社スピカご紹介
ネイルブックでのGoogle Play ASOについて
SSDとTokyoTyrantやMySQLの性能検証

中小規模サービスのApacheチューニング

  • 2. Copyright © Spika Inc. 2016 all rights reserved. 2 自己紹介 國府田勲 株式会社スピカ 代表取締役 インフラエンジニア 数百万人 数千万人 100万人 http://qiita.com/kou
  • 3. Copyright © Spika Inc. 2016 all rights reserved. 1. はじめに – 前提となるシステム構成 2. チューニングの進め方 – 監視の実施 – ボトルネックの調査 – チューニングの実施 3. チューニング事例 – 初期設定 – 個別設定 4. 質疑応答 3 アジェンダ
  • 4. Copyright © Spika Inc. 2016 all rights reserved. 1. はじめに 4
  • 5. Copyright © Spika Inc. 2016 all rights reserved. • 前提となるシステム構成 –OS • Linux –Apache • バージョン 2.2 • 動作モード prefork MPM –構成 • WEBサーバ1-2台程度 • データベース1台 5 1. はじめに WEBサーバ DBサーバ
  • 6. Copyright © Spika Inc. 2016 all rights reserved. 2. チューニングの進め方 6
  • 7. Copyright © Spika Inc. 2016 all rights reserved. 7 2. チューニングの進め方 Plan Do Check Action Plan 監視しボトルネック箇所を特定する Do チューニングを実施する Check 改善したか確認する Action 改善していなければ再度実施 チューニングもPDCAが重要
  • 8. Copyright © Spika Inc. 2016 all rights reserved. • 監視の目的 – ベースラインの確立 – 性能劣化の検知 – ボトルネックの大まかな特定 – チューニング結果の確認 8 2. チューニングの進め方 / 監視の実施 定常的な監視を行う
  • 9. Copyright © Spika Inc. 2016 all rights reserved. • 監視項目 – ネットワークの利用状況 – システムの利用状況 – プロセスの利用状況 – アプリケーションの応答・処理時間 9 2. チューニングの進め方 / 監視の実施
  • 10. Copyright © Spika Inc. 2016 all rights reserved. • 死活監視とリソース監視の両方が統合されて いる • 保持されるデータ期間が比較的長いこと • 日付・時間を指定して動的なグラフ作成がで きること 10 2. チューニングの進め方 / 監視の実施 チューニングの観点からみた 監視ツール選択のポイント
  • 11. Copyright © Spika Inc. 2016 all rights reserved. DIY型 SaaS型 11 2. チューニングの進め方 / 監視の実施
  • 12. Copyright © Spika Inc. 2016 all rights reserved. 12 2. チューニングの進め方 / 監視の実施
  • 13. Copyright © Spika Inc. 2016 all rights reserved. • 各種ログのチェック – エラーや設定上限値に関する情報が出力されていないか 確認する • モニタリングコマンドの実行 – vmstat – free – top など 13 2. チューニングの進め方 / ボトルネックの調査 監視ツールで大まかな傾向を把握し 詳細はサーバ上で確認する
  • 14. Copyright © Spika Inc. 2016 all rights reserved. 14 2. チューニングの進め方 / ボトルネックの調査 vmstatのチェックポイント [kouda@nb-app]~% vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0 0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0 0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0 0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0 2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0 1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0 1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0 procsチェックポイント • rがCPUコア数以上 • 何らかの理由で処理待ちが発生している • bが発生している • ディスクやネットワークのI/O待ちがある • ファイル書き込みや外部DBへの問い合わせ待ちがないか 確認
  • 15. Copyright © Spika Inc. 2016 all rights reserved. 15 2. チューニングの進め方 / ボトルネックの調査 vmstatのチェックポイント [kouda@nb-app]~% vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0 0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0 0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0 0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0 2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0 1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0 1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0 swapチェックポイント • si/soで数値が出力されている • swapが発生しているのでメモリ増設が必要
  • 16. Copyright © Spika Inc. 2016 all rights reserved. 16 2. チューニングの進め方 / ボトルネックの調査 vmstatのチェックポイント [kouda@nb-app]~% vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 9445900 284288 2531212 0 0 0 8 8 4 26 1 73 0 0 0 0 0 9445768 284288 2531220 0 0 0 0 1841 981 15 1 84 0 0 0 0 0 9445960 284288 2531228 0 0 0 92 2181 1197 29 1 71 0 0 0 0 0 9445532 284288 2531232 0 0 0 0 2020 979 24 0 76 0 0 2 0 0 9445672 284288 2531240 0 0 0 0 2365 1285 32 1 66 0 0 1 0 0 9445784 284288 2531244 0 0 0 0 852 469 8 0 92 0 0 1 0 0 9446068 284288 2531248 0 0 0 4 1424 798 11 1 88 0 0 cpuチェックポイント • us+syの数値が100近い • CPUが性能限界 • waの数値が大きい • ディスクやネットワークでのI/O待ちが発生している
  • 17. Copyright © Spika Inc. 2016 all rights reserved. 17 2. チューニングの進め方 / ボトルネックの調査 freeのチェックポイント bash-4.2# free -m total used free shared buffers cached Mem: 1997 1153 844 158 53 933 -/+ buffers/cache: 167 1830 Swap: 964 0 964 チェックポイント • buffers/cacheのfreeが0に近い • 利用できる残りのメモリ量が少ない
  • 18. Copyright © Spika Inc. 2016 all rights reserved. • mod_statusの確認 – Apacheに用意されているモニタリングモジュール – Apacheのプロセスの稼働状況をモニタリングすることがで きます 18 2. チューニングの進め方 / ボトルネックの調査
  • 19. Copyright © Spika Inc. 2016 all rights reserved. 19 2. チューニングの進め方 / ボトルネックの調査 # mod_statusモジュールを有効にする LoadModule status_module modules/mod_status.so # 詳細情報出力オプション(デフォルトOff) ExtendedStatus On # ハンドラー設定 <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .your.office </Location> mod_status有効化
  • 20. Copyright © Spika Inc. 2016 all rights reserved. 20 2. チューニングの進め方 / ボトルネックの調査
  • 21. Copyright © Spika Inc. 2016 all rights reserved. 21 2. チューニングの進め方 / ボトルネックの調査 チェックポイント • Scoreboardがアルファベット埋め尽くされている • 接続数に対して子プロセス数が足りていない mod_statusのチェックポイント
  • 22. Copyright © Spika Inc. 2016 all rights reserved. 22 2. チューニングの進め方 / チューニングの実施 Apacheチューニングとは効率を高めること (+) 不足を補う • CPU割当を増やす • メモリ割り当てを増やす (ー) 無駄を減らす • 使っていないものを省く • 重要度の低いことはやめ る 効率を高める方法
  • 23. Copyright © Spika Inc. 2016 all rights reserved. • 実施時の注意点 – 同時に複数箇所を変更しない • 効果の切り分けができないため – 変更情報は記録しておく • 後日、統計値と突き合わせて分析する際に必要 – ボトルネックの原因は複合的に発生する • あるボトルネック箇所をクリアすると、他の部分がボト ルネックとなる 23 2. チューニングの進め方 / チューニングの実施
  • 24. Copyright © Spika Inc. 2016 all rights reserved. 24 2. チューニングの進め方 / チューニングの実施 ボトルネックA対策前 ボトルネックA ボトルネックB ボトルネックA対策後 ボトルネックBが 顕在化する 目標を達成するまで根気よくやり続ける
  • 25. Copyright © Spika Inc. 2016 all rights reserved. 3. チューニング事例 25
  • 26. Copyright © Spika Inc. 2016 all rights reserved. 26 3. チューニング事例 prefork MPMの概要 httpd親プロセス httpd 子プロセス httpd 子プロセス httpd 子プロセス httpd 子プロセス 親プロセスが子プロセスを管理 1子プロセス1接続を処理
  • 27. Copyright © Spika Inc. 2016 all rights reserved. Timeout 説明 • リクエストを受け取ってから処理完了までの待機時 間 • デフォルトは300秒 チューニング方針 • 時間を短くする • 60秒以下がオススメ 27 3. チューニング事例 / 初期設定
  • 28. Copyright © Spika Inc. 2016 all rights reserved. KeepAlive 説明 • 1回のTCP接続で複数のHTTPリクエストを処理する • デフォルトはOn チューニング方針 • On/Offはサイト特性による • OnにするときにもKeepAliveTimeoutや MaxKeepAliveRequestsを設定する • AWSのELB配下の場合はOnにする 28 3. チューニング事例 / 初期設定
  • 29. Copyright © Spika Inc. 2016 all rights reserved. HostnameLookups 説明 • ログファイルに記録する際に接続元IPアドレスを逆 引きする • デフォルトはOff チューニング方針 • Onにしない • DNSの逆引きは時間がかかる • どうしてもやりたい場合はlogresolveなどで後で行う 29 3. チューニング事例 / 初期設定
  • 30. Copyright © Spika Inc. 2016 all rights reserved. mod_deflate 説明 • HTTPで圧縮転送を行うモジュール • 適用範囲を指定して利用する チューニング方針 • テキストコンテンツに適用する • 画像ファイルには適用しない • 圧縮率はサーバのCPUリソースと相談して決める 30 3. チューニング事例 / 初期設定
  • 31. Copyright © Spika Inc. 2016 all rights reserved. 31 3. チューニング事例 / 初期設定 # mod_deflateモジュールを有効にする LoadModule deflate_module modules/mod_deflate.so # 圧縮レベル(低圧縮1〜高圧縮9) DeflateCompressionLevel 5 # 適用コンテンツを指定 AddOutputFilterByType DEFLATE text/html text/plain text/xml mod_deflate有効化
  • 32. Copyright © Spika Inc. 2016 all rights reserved. 不要モジュールの削除 説明 • Loadしないことで使用メモリが削減できる チューニング方針 • 利用していないモジュールを削除する • LoadModule行をコメントアウト • ただし、自信がないときは削除しない 32 3. チューニング事例 / 初期設定
  • 33. Copyright © Spika Inc. 2016 all rights reserved. 33 3. チューニング事例 / 初期設定 削除前 削除後 bash-4.2# ps axu | grep -e RSS -e httpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 9 0.0 0.3 121924 6148 ? Ss Nov21 0:02 /usr/sbin/httpd -k start apache 181 0.0 0.2 121924 5188 ? S 02:14 0:00 /usr/sbin/httpd -k start apache 182 0.0 0.2 121924 5148 ? S 02:14 0:00 /usr/sbin/httpd -k start apache 183 0.0 0.2 121924 5376 ? S 02:14 0:00 /usr/sbin/httpd -k start apache 184 0.0 0.2 121924 5248 ? S 02:14 0:00 /usr/sbin/httpd -k start bash-4.2# ps axu | grep -e RSS -e httpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 9 0.0 0.3 176400 6856 ? Ss Nov21 0:02 /usr/sbin/httpd -k start apache 10 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 11 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 12 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 13 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start 6.1MBから5.2MB程度まで削減
  • 34. Copyright © Spika Inc. 2016 all rights reserved. MaxClients/ServerLimit 説明 • サーバプロセスの上限数を設定する • プロセス数≒最大同時接続数 チューニング方針 • topやpsコマンドなどで使用メモリ量を調査し、大ま かに決定する • CPU、メモリ使用量をみながら微調整する 34 3. チューニング事例 / 個別設定
  • 35. Copyright © Spika Inc. 2016 all rights reserved. MaxClients数の算出方法 • psコマンドでhttpdの1プロセスあたりのRSS(物 理メモリ使用量)を計測する • 下記の数式を満たすようにMaxClients数を調 整する 35 3. チューニング事例 / 個別設定 サーバの物理メモリ量>httpd1プロセスあたり のメモリ使用量×MaxClient数+他のプロセスが 利用するメモリ使用量
  • 36. Copyright © Spika Inc. 2016 all rights reserved. 36 3. チューニング事例 / 個別設定 bash-4.2# ps axu | grep -e RSS -e httpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 9 0.0 0.3 176400 6856 ? Ss Nov21 0:02 /usr/sbin/httpd -k start apache 10 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 11 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 12 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start apache 13 0.0 0.2 176536 6088 ? S Nov21 0:00 /usr/sbin/httpd -k start RSSの数値を確認 KB単位
  • 37. Copyright © Spika Inc. 2016 all rights reserved. MinSpareServers/MaxSpareServers 説明 • 待機プロセス数を定義 • Min〜Maxの間となるようにプロセス数が維持される チューニング方針 • WEB専用サーバであれば MinSpareServers=MaxSpareServers=MaxClientで良 い 37 3. チューニング事例 / 個別設定
  • 38. Copyright © Spika Inc. 2016 all rights reserved. MaxRequestsPerChild 説明 • 子プロセスが処理するリクエスト数 • この数値を超えると子プロセスが終了する • デフォルト:10000 • 0にすると無制限となる チューニング方針 • 子プロセスがメモリ肥大化しない場合は0 • 制限値を設定しておくと安心 38 3. チューニング事例 / 個別設定
  • 39. Copyright © Spika Inc. 2016 all rights reserved. worker MPMに切り替える 説明 • 各子プロセスがマルチスレッドで処理するため消費 メモリが少なくなる チューニング方針 • サードパーティーモジュールがスレッドセーフであれ ば採用 39 3. チューニング事例 / 個別設定
  • 40. Copyright © Spika Inc. 2016 all rights reserved. 40 3. チューニング事例 / 個別設定 worker MPMの概要 httpd親プロセス httpd 子プロセス httpd 子プロセス httpd 子プロセス httpd 子プロセス 1子プロセスが複数接続を処理
  • 41. Copyright © Spika Inc. 2016 all rights reserved. Apacheチューニングは万能ではありません • スケールアップ • スケールアウト • アプリケーション側のチューニング などの手段を検討しましょう 41 最後に どうしても目標が満たせない場合
  • 42. Copyright © Spika Inc. 2016 all rights reserved. 42 エンジニア募集中 エンジニア募集中! あらゆるジャンルで募集してます 詳細はWantedlyで https://www.wantedly.com/companies/spika/info