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.

人気番組との戦い! Javaシステムのパフォーマンスチューニング奮闘記

3,121 views

Published on

Performance tuning and troubleshooting on Java applications on the air.

Published in: Software
  • Be the first to comment

人気番組との戦い! Javaシステムのパフォーマンスチューニング奮闘記

  1. 1. 人気番組との戦い!
 Javaシステムのパフォーマンス チューニング奮闘記 Shin Tanimoto
 Acroquest Technology Co., LTD
  2. 2. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2 満員御礼! ありがとうございます!!
  3. 3. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 自己紹介 3 • 谷本 心 (Shin Tanimoto) - Acroquest Technology株式会社 - 開発&トラブルシュート教育 - JavaOneスピーカー - JJUG / 関ジャバ / S2JSFコミッタ - Twitter : @cero_t (日本語) - Facebook : shin.tanimoto (英語)
  4. 4. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4 Java Performance: The Definitive Guide 日本語版、
 オライリーブースで
 先行販売中!!
  5. 5. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 先ほどまで
 サイン会してました! 5
  6. 6. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6
  7. 7. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 7 たぶん、ほぼほぼ
 寺田さんの
 サイン希望者ですけどね!
  8. 8. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 8 ところで、いま
 Javaパフォーマンス本
 をググった人?
  9. 9. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 9 そう、PC・スマホの時代。
 視聴者は気になったものを
 すぐにググル。
  10. 10. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10 どれぐらいの人が?
  11. 11. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 11 たとえば、視聴率8%の
 あの番組に
 超潜入されたとすると。
  12. 12. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 12 127,000,000 (人)
 * 0.08 (視聴率)
 ≒10,000,000 (人)
  13. 13. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 13 10,000,000 (人)
 * 0.01 (検索する率)
 * 6 (一人あたりの検索回数)
 ≒ 600,000 (回)
  14. 14. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 14 仮に10分間で来るとすれば
 60,000回/分
 1,000回/秒
  15. 15. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 15 最大同時100アクセス/秒
 ぐらいのキャパだと、
 これは捌けないわけですよ
  16. 16. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 16 じゃ、どうするの?
  17. 17. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 17 スケーラビリティ重要
 ピーキー対応重要
 ということは・・・
  18. 18. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 18 そう、AWS!!
  19. 19. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19 って現実、そんなに
 甘くないんだよ!
  20. 20. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 20 そのシステム、スケールするの? あと、関連システムを含めて
 全部AWSに持って行くの?
 誰がやるの? 死ぬの?
  21. 21. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21 誰しもが、すぐAWSに
 移行できるわけではない。
  22. 22. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22 では、
 いま動いているシステムを
 どうやって
 改善すれば良いのか?
  23. 23. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23 0. 問題の定義
  24. 24. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 0. 問題の定義 対象 人気宿泊施設の予約システム いま、そこで、実際に動いているシステム
 → 早く治したい、すぐ治したい、いま治したい! 問題点 TV放送のたびにシステムダウンする
 → 予約しようとした人が諦める。 24
  25. 25. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 0. 問題の定義 問題の原因 APサーバ側の問題? DBサーバ側の問題? ネットワークの問題?
 → どこにボトルネックがあるかは不明 25
  26. 26. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 0. 問題の定義 26 さて、あなたなら
 どうする?
  27. 27. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27 1. アクセス数の制限
 2. 問題箇所の性能改善
 3. ログ収集と可視化 4. インフラの改善
  28. 28. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28 全部、順番にやろう!
  29. 29. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29 1. アクセス数の制限
 2. 問題箇所の性能改善
 3. ログ収集と可視化 4. インフラの改善 暫定対処
 低コスト 根本解決
 高コスト
  30. 30. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 30 1. アクセス数の制限
  31. 31. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. アクセス数の制限 31 アクセスを捌けないなら
 ブロックすればいいのよ
  32. 32. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. アクセス数の制限 32 APサーバへのアクセス数が
 閾値を越えたら
 503エラーを返すServletFilter
 を適用。
  33. 33. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. アクセス数の制限 33 ※ただし予約処理に
 進んでいる人は除く
  34. 34. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. アクセス数の制限 34 これでサーバが落ちる頻度は
 グッと下がった。
 ただし、キャパシティも
 スループットも低いまま。
  35. 35. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 35 2. 問題箇所の性能改善
  36. 36. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 36 事件は現場で
 起きてるんだ!
  37. 37. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 37 商用環境で実際に起きている パフォーマンス問題に対して
 どうアプローチするか?
  38. 38. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 どこに問題があるのか? 1. APサーバのCPU使用率測定 top
 2. APサーバのスレッドダンプ取得(遅い時に複数回) jstack <PID>
 3. DBサーバのCPU使用率測定 top 38
  39. 39. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 APサーバのCPU使用率が高い場合 1. スレッドごとのCPU使用率を取得 top -H ps auxww -L | grep java
 →重いスレッドのスレッドID(10進数)を確認 スレッドダンプのスレッドID(16進数)と対応させて絞り込み 2. 重い処理が「VM Thread」以外の場合 スタックトレースに表れている処理が問題箇所。 3. 重い処理が「VM Thread」の場合 GCが頻発している可能性あり(次ページへ) 39
  40. 40. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 GCが頻発している可能性がある場合 ヒープの使用状況、GCの発生回数を確認する jstat -gc <PID> 1000 OC : Old領域のキャパシティサイズ OU : Old領域の利用サイズ FGC : フルGCの回数 40
  41. 41. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 APサーバのCPU使用率が低い場合 何度か取得したスレッドダンプから、
 頻出するメソッドを特定する。
 DPサーバのCPU使用率が高い場合 何度か取得したスレッドダンプから、
 頻出するDBアクセスメソッドを特定する。 41
  42. 42. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 42 top top -H
 ps auxww -L jstack <PID> CPU使用率:高 対象を特定 CPU使用率:低 スレッドごとの
 CPU使用率取得 スレッドダンプ取得 対象がVM Thread jstack <PID> 対象を推定 対象がVM Thread以外 jstat -gc <PID> 1000スタックトレース確認 フルGC頻度確認
  43. 43. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 43 パフォーマンス問題の8割は
 これで問題箇所を特定できる
  44. 44. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. 問題箇所の性能改善 44 そっから先は、
 頑張れ!
  45. 45. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 45 3. ログ収集と可視化
  46. 46. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 46 の前に、
 ワンポイント
 Javaトラシュー講座
  47. 47. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 47 Java標準のGUI
 トラブルシューティング
 ツールと言えば?
  48. 48. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. VisualVM 48
  49. 49. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. Java Mission Control 49
  50. 50. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 50 どっちがいいの?
  51. 51. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 51 ヒープダンプの解析で
 今夜くらべてみました
  52. 52. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 52 VisualVMの場合
  53. 53. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 53
  54. 54. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 54 char[]とStringが大きい。
 ヒープダンプあるある。
  55. 55. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 55 Mission Control +
 JOverflowプラグインの場合
  56. 56. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 56
  57. 57. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. x. ワンポイントJavaトラシュー講座 57 Pentahoのログが大きいことが、一目で分かる。
  58. 58. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 教訓 58 ツールでできることの
 「本質」は変わらないけど
 「効率」は大きく変わる。
  59. 59. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 59 3. ログ収集と可視化
  60. 60. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 60 事件は現場で
 起きているのか?
  61. 61. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 なぜログ収集が必要なのか? 実際に問題が起きているかどうかの、
 貴重な証拠になるため。 「この機能、本当にきちんと動いてるの?」
 → 500エラーが○回発生している! 「文字列を + で結合しているから遅くなる」
 → この機能の平均レスポンスタイムは○秒である 61
  62. 62. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 なぜ可視化が必要なのか? 状況が一目で分かる みんなで同じものを見られる
 → 野球のスコアボードと同じ 62
  63. 63. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 63 っていうか
 可視化しないと
 どうせ見ないでしょ!?
  64. 64. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 64 きっと、きちんと
 動いているだろう
 (不安だけど)
  65. 65. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 65 きっと、パフォーマンスも
 良好だろう
 (不安だけど)
  66. 66. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 66 楽観的推測ではなく
 きちんとログで確認するため に可視化が必要
  67. 67. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 67 つまりログ可視化は
 エンジニアの「責任」
  68. 68. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 68 じゃ、何を見ましょうか
  69. 69. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 69 CPU
 使用率 メモリ
 使用量 アクセス数 レスポンス
 タイム 処理
 成功数 遅いSQL リソース
 ログ ○ ○ アクセス
 ログ ○ ○ ○ スロー
 クエリ ○ 他にも・・・ GCログ、I/Oサイズ、スレッド数、セッション数など すぐに見たい情報と、収集元ログの例
  70. 70. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 70 そしてログ可視化、
 と言えば。
  71. 71. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 71 Elasticseach
 +
 Kibana
  72. 72. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 72 簡単に、小さく、今すぐ
 始められる
  73. 73. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 ログの収集と分析 (1) Elasticsearch(蓄積) • リアルタイム検索・解析エンジン • 平たく言えば、ログの検索システム (2) Kibana(可視化) • ログ検索&可視化ツール • 平たく言えば、Elasticsearchのフロントエンド 73
  74. 74. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 ログの収集と分析 (3) fluentd(収集) • 各サーバで動くログ収集のエージェント • 平たく言えば、ログをtailしてElasticsearchに送るヤツ (4) logstash(収集) • fluentdと同じ • ただキューが れても捨てないから、
 過去ログ投入に利用 • いつかはEmBulk 74
  75. 75. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 75
  76. 76. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 76 ログを可視化した結果
  77. 77. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化(アクセス数) 77 ↑テレビ テレビの影響↑
  78. 78. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化(上:アクセス数、下:エラー数) 78
  79. 79. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化(上:アクセス数、下:レスポンスタイム) 79
  80. 80. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化(上:レスポンスタイム、下:スロークエリ) 80
  81. 81. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 普段から、キャパシティぎりぎりのようだ TVが来た時に増えたアクセス数が、
 503エラーにせざるを得ない。 レスポンス悪化するタイミングと、
 スロークエリが悪化するタイミングが
 完全に一致。つまりDBネック。
 →あとは、ネックのSQLを改善するだけ。 81
  82. 82. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 さらなる可視化 ROI(投資対効果) コンバージョンレート(成約率) 売り上げ 82
  83. 83. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 3. ログ収集と可視化 さらなる可視化 ROI(投資対効果) コンバージョンレート(成約率) 売り上げ
 
 →何の話しとんねん、ここJava Day Tokyoやぞ! 83
  84. 84. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 84 4. インフラの改善
  85. 85. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. インフラの改善 85 すぐに、AWS、AWS
 言いやがって・・・
  86. 86. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. インフラの改善 86 なので僕も
 AWSにしました。
  87. 87. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. インフラの改善 87 大規模改修のタイミングで
 REST API化 + AWS化
  88. 88. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. インフラの改善 88 既存の周辺システムとは
 DirectConnectで接続
  89. 89. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. インフラの改善 89 I love AWS❤
  90. 90. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. 90 まとめ
  91. 91. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved. まとめ 「理論的に」ではなく「今そこにある問題」 を解決するための手法を考えることが重要。 パフォーマンス問題は、
 Javaのコマンドラインツールを使って
 一瞬で絞り込め! ログを見よう! そのために、可視化重要。 91
  92. 92. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 92 ログの可視化は
 エンジニアの責任だと思ってやりましょう!

×