More Related Content
Similar to 中小規模サービスのApacheチューニング (20)
中小規模サービスの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
アジェンダ
- 5. Copyright © Spika Inc. 2016 all rights reserved.
• 前提となるシステム構成
–OS
• Linux
–Apache
• バージョン 2.2
• 動作モード prefork MPM
–構成
• WEBサーバ1-2台程度
• データベース1台
5
1. はじめに
WEBサーバ
DBサーバ
- 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. チューニングの進め方 / 監視の実施
- 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有効化
- 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が
顕在化する
目標を達成するまで根気よくやり続ける
- 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