Webアプリケーションの
パフォーマンス向上のコツ
概要編
ISUCON夏期講習
2014/8/20
Masahiro Nagano
Me
• 長野雅広 Masahiro Nagano
• @kazeburo
• Perl Monger
• Operations Engineer / Site Reliability
• Development support
on LINE...
Webアプリケーションの
パフォーマンス向上のコツ
概要編
Webアプリケーションの構成
Client Reverse
Proxy
App
Server
RDBMS
Cache,KVS
Webアプリケーションの構成
Reverse Proxy: クライアントからの接続を
受け、Applicationサーバに処理を中継す
る。画像,js,css などの静的コンテンツを返す
役割もある
Application Server: ユー...
Webアプリケーションの構成
RDBMS: データを格納し、要求に応じてデ
ータを返す。多くの場合SQLが使われる
MySQL, PostgreSQL, Oracle..
KVS,Cache: 限られたデータ格納方式のみを
サポートするがその分...
Webアプリケーションの
パフォーマンスが悪い時、
どこかにボトルネックが
存在する
ボトルネックは
ひとつではない
Webアプリケーションの
ボトルネック
Client Reverse
Proxy
App
Server
DB
Cache
クライアントの
パフォーマンス
通信経路
接続数
CPU
使用率
データ量
DiskIO
移動するボトルネック
ボトルネックの移動
Client Reverse
Proxy
App
Server
DB
Cache
通信経路
∼
ボトルネックの移動
Client Reverse
Proxy
App
Server
DB
Cache
CPU
使用率
どこから手を
付ければ良いのか...
『推測するな計測せよ』
計測する
“top”コマンド
“c”を押すと実行中プロセスのコマンドライン引数も表示される
上位のプロセスほどCPU使用率が高い
MySQLとRubyが重そう..
それぞれのプロセスで
何が動いているか調べ、
ボトルネックを
より詳しく特定する
調査対象
• アクセスログ・クエリログ
• Reverse Proxy (Webサーバ)の設定
• ミドルウェアの設定
• ソースコード
• 分かる人に聞く
どうボトルネックを
解消していくか
パフォーマンス
向上のコツ
(概要編)
(1) 通信しない
(2) 計算しない
* 減らすという意味
“Hello World”が最速の
Web Application
何もしない
Webアプリケーションに
如何にして近づけるか
(1) 通信しない
• TCPは高信頼のプロトコル。速度は比較
的遅い
• データ転送の順序保証・輻輳制御・
フロー制御
• 中でもTCPの接続(three-way
handshaking)はコストが高い
TCP 接続/切断
http://ja.wikipedia.org/wiki/Transmission_Control_Protocol
connect disconnect
clientserver clientserver
(1) 通信をしない
1. 1回のやりとりでより多くのデータを
取得し、通信回数を減らす
2. 処理を行う場所を変更し、通信自体を
不要にする
3. 通信結果を cache し、再利用する
(1)通信をしない
Client Reverse
Proxy
App
Server
DB
Cache
2.処理
移動
1.回数
削減
(2) 計算しない
• HTMLのレンダリング
• テキストや画像変換処理
• 大量のデータの読み取り・集計・ソート
• コンテキストスイッチ・プロセス生成
HTMLレンダリング
• テンプレートエンジンの設定
• テンプレートから中間コードを作
り、cache することで高速化
• ほとんどHTMLの内容が変わらない場合
のテンプレートエンジンのコスト
テキスト・画像変換処理
• 多くのWebアプリケーションはコンテ
ンツの更新より、表示回数の方が多い
• 表示の度にコンテンツの変換を行って
いると、ボトルネックとなりやすい
RDBMS最適化
• SQLチューニング
• インデックスの追加
• データ構造を変える
• KVSの利用
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process...
コンテキストスイッチ
CPU CPU CPU CPU
process process
process
process process process process
process process process process process...
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process...
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process...
コンテキストスイッチ
• プロセス数が増え、コンテクストスイ
ッチの回数が増えると負荷が高まる
• プロセスを新たに生成するのも重い処
理となる
Enjoy ISUCON
 Webアプリケーションの パフォーマンス向上のコツ 概要編
Upcoming SlideShare
Loading in...5
×

Webアプリケーションの パフォーマンス向上のコツ 概要編

22,795

Published on

Published in: Internet
0 Comments
26 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
22,795
On Slideshare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
29
Comments
0
Likes
26
Embeds 0
No embeds

No notes for slide

Webアプリケーションの パフォーマンス向上のコツ 概要編

  1. 1. Webアプリケーションの パフォーマンス向上のコツ 概要編 ISUCON夏期講習 2014/8/20 Masahiro Nagano
  2. 2. Me • 長野雅広 Masahiro Nagano • @kazeburo • Perl Monger • Operations Engineer / Site Reliability • Development support on LINE Family, livedoor • ISUCON 2011-2012 出題。 ISUCON 2013 優勝
  3. 3. Webアプリケーションの パフォーマンス向上のコツ 概要編
  4. 4. Webアプリケーションの構成 Client Reverse Proxy App Server RDBMS Cache,KVS
  5. 5. Webアプリケーションの構成 Reverse Proxy: クライアントからの接続を 受け、Applicationサーバに処理を中継す る。画像,js,css などの静的コンテンツを返す 役割もある Application Server: ユーザからのリクエス トを受けて適切なページを構築・レスポン スを行う
  6. 6. Webアプリケーションの構成 RDBMS: データを格納し、要求に応じてデ ータを返す。多くの場合SQLが使われる MySQL, PostgreSQL, Oracle.. KVS,Cache: 限られたデータ格納方式のみを サポートするがその分高速に動作する Memcached, Redis
  7. 7. Webアプリケーションの パフォーマンスが悪い時、 どこかにボトルネックが 存在する
  8. 8. ボトルネックは ひとつではない
  9. 9. Webアプリケーションの ボトルネック Client Reverse Proxy App Server DB Cache クライアントの パフォーマンス 通信経路 接続数 CPU 使用率 データ量 DiskIO
  10. 10. 移動するボトルネック
  11. 11. ボトルネックの移動 Client Reverse Proxy App Server DB Cache 通信経路 ∼
  12. 12. ボトルネックの移動 Client Reverse Proxy App Server DB Cache CPU 使用率
  13. 13. どこから手を 付ければ良いのか...
  14. 14. 『推測するな計測せよ』
  15. 15. 計測する
  16. 16. “top”コマンド “c”を押すと実行中プロセスのコマンドライン引数も表示される 上位のプロセスほどCPU使用率が高い
  17. 17. MySQLとRubyが重そう..
  18. 18. それぞれのプロセスで 何が動いているか調べ、 ボトルネックを より詳しく特定する
  19. 19. 調査対象 • アクセスログ・クエリログ • Reverse Proxy (Webサーバ)の設定 • ミドルウェアの設定 • ソースコード • 分かる人に聞く
  20. 20. どうボトルネックを 解消していくか
  21. 21. パフォーマンス 向上のコツ (概要編)
  22. 22. (1) 通信しない
  23. 23. (2) 計算しない
  24. 24. * 減らすという意味
  25. 25. “Hello World”が最速の Web Application 何もしない Webアプリケーションに 如何にして近づけるか
  26. 26. (1) 通信しない • TCPは高信頼のプロトコル。速度は比較 的遅い • データ転送の順序保証・輻輳制御・ フロー制御 • 中でもTCPの接続(three-way handshaking)はコストが高い
  27. 27. TCP 接続/切断 http://ja.wikipedia.org/wiki/Transmission_Control_Protocol connect disconnect clientserver clientserver
  28. 28. (1) 通信をしない 1. 1回のやりとりでより多くのデータを 取得し、通信回数を減らす 2. 処理を行う場所を変更し、通信自体を 不要にする 3. 通信結果を cache し、再利用する
  29. 29. (1)通信をしない Client Reverse Proxy App Server DB Cache 2.処理 移動 1.回数 削減
  30. 30. (2) 計算しない • HTMLのレンダリング • テキストや画像変換処理 • 大量のデータの読み取り・集計・ソート • コンテキストスイッチ・プロセス生成
  31. 31. HTMLレンダリング • テンプレートエンジンの設定 • テンプレートから中間コードを作 り、cache することで高速化 • ほとんどHTMLの内容が変わらない場合 のテンプレートエンジンのコスト
  32. 32. テキスト・画像変換処理 • 多くのWebアプリケーションはコンテ ンツの更新より、表示回数の方が多い • 表示の度にコンテンツの変換を行って いると、ボトルネックとなりやすい
  33. 33. RDBMS最適化 • SQLチューニング • インデックスの追加 • データ構造を変える • KVSの利用
  34. 34. コンテキストスイッチ CPU CPU CPU CPU process process process process process process process process process process process process process process process process process process process process process OSによりスケジュール実行
  35. 35. コンテキストスイッチ CPU CPU CPU CPU process process process process process process process process process process process process process process process process process process process process process OSによりスケジュール実行
  36. 36. コンテキストスイッチ CPU CPU CPU CPU process process process process process process process process process process process process process process process process process process process process process OSによりスケジュール実行
  37. 37. コンテキストスイッチ CPU CPU CPU CPU process process process process process process process process process process process process process process process process process process process process process OSによりスケジュール実行 process/taskの切り替え時に CPUの状態を保存・復元
  38. 38. コンテキストスイッチ • プロセス数が増え、コンテクストスイ ッチの回数が増えると負荷が高まる • プロセスを新たに生成するのも重い処 理となる
  39. 39. Enjoy ISUCON
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×