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

92
人気番組との戦い! Java システムのパフォーマンス チューニング奮闘記 Shin Tanimoto Acroquest Technology Co., LTD
  • Upload

    -
  • Category

    Software

  • view

    1.691
  • download

    2

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

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

Shin TanimotoAcroquest Technology Co., LTD

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2

満員御礼! ありがとうございます!!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.

自己紹介

3

• 谷本 心 (Shin Tanimoto)

- Acroquest Technology株式会社

- 開発&トラブルシュート教育

- JavaOneスピーカー

- JJUG / 関ジャバ / S2JSFコミッタ

- Twitter : @cero_t (日本語)

- Facebook : shin.tanimoto (英語)

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4

Java Performance: The Definitive Guide

日本語版、オライリーブースで先行販売中!!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

先ほどまでサイン会してました!

5

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.6

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.7

たぶん、ほぼほぼ寺田さんの

サイン希望者ですけどね!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.8

ところで、いまJavaパフォーマンス本 をググった人?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.9

そう、PC・スマホの時代。視聴者は気になったものを

すぐにググル。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.10

どれぐらいの人が?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.11

たとえば、視聴率8%のあの番組に

超潜入されたとすると。

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 (人)

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 (回)

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.14

仮に10分間で来るとすれば60,000回/分1,000回/秒

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.15

最大同時100アクセス/秒ぐらいのキャパだと、これは捌けないわけですよ

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.16

じゃ、どうするの?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.17

スケーラビリティ重要ピーキー対応重要ということは・・・

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.18

そう、AWS!!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.19

って現実、そんなに甘くないんだよ!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.20

そのシステム、スケールするの?あと、関連システムを含めて全部AWSに持って行くの?誰がやるの? 死ぬの?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.21

誰しもが、すぐAWSに移行できるわけではない。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.22

では、いま動いているシステムを

どうやって改善すれば良いのか?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.23

0. 問題の定義

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

0. 問題の定義

対象人気宿泊施設の予約システムいま、そこで、実際に動いているシステム→ 早く治したい、すぐ治したい、いま治したい!

問題点TV放送のたびにシステムダウンする→ 予約しようとした人が諦める。

24

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

0. 問題の定義

問題の原因APサーバ側の問題?

DBサーバ側の問題?

ネットワークの問題?→ どこにボトルネックがあるかは不明

25

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

0. 問題の定義

26

さて、あなたならどうする?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.27

1. アクセス数の制限2. 問題箇所の性能改善3. ログ収集と可視化4. インフラの改善

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.28

全部、順番にやろう!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.29

1. アクセス数の制限2. 問題箇所の性能改善3. ログ収集と可視化4. インフラの改善

暫定対処低コスト

根本解決高コスト

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.30

1. アクセス数の制限

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

1. アクセス数の制限

31

アクセスを捌けないならブロックすればいいのよ

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

1. アクセス数の制限

32

APサーバへのアクセス数が閾値を越えたら

503エラーを返すServletFilter を適用。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

1. アクセス数の制限

33

※ただし予約処理に進んでいる人は除く

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

1. アクセス数の制限

34

これでサーバが落ちる頻度はグッと下がった。

ただし、キャパシティも スループットも低いまま。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.35

2. 問題箇所の性能改善

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

36

事件は現場で起きてるんだ!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

37

商用環境で実際に起きているパフォーマンス問題に対してどうアプローチするか?

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

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善APサーバのCPU使用率が高い場合1. スレッドごとのCPU使用率を取得

top -Hps auxww -L | grep java →重いスレッドのスレッドID(10進数)を確認

スレッドダンプのスレッドID(16進数)と対応させて絞り込み

2. 重い処理が「VM Thread」以外の場合

スタックトレースに表れている処理が問題箇所。3. 重い処理が「VM Thread」の場合

GCが頻発している可能性あり(次ページへ)

39

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

GCが頻発している可能性がある場合ヒープの使用状況、GCの発生回数を確認する

jstat -gc <PID> 1000OC : Old領域のキャパシティサイズ

OU : Old領域の利用サイズ

FGC : フルGCの回数

40

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

APサーバのCPU使用率が低い場合何度か取得したスレッドダンプから、頻出するメソッドを特定する。

DPサーバのCPU使用率が高い場合何度か取得したスレッドダンプから、頻出するDBアクセスメソッドを特定する。

41

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頻度確認

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

43

パフォーマンス問題の8割はこれで問題箇所を特定できる

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. 問題箇所の性能改善

44

そっから先は、頑張れ!

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.45

3. ログ収集と可視化

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.46

の前に、ワンポイント

Javaトラシュー講座

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

47

Java標準のGUIトラブルシューティングツールと言えば?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

1. VisualVM

48

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

2. Java Mission Control

49

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

50

どっちがいいの?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

51

ヒープダンプの解析で今夜くらべてみました

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

52

VisualVMの場合

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

53

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

54

char[]とStringが大きい。ヒープダンプあるある。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

55

Mission Control +JOverflowプラグインの場合

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

56

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

x. ワンポイントJavaトラシュー講座

57

Pentahoのログが大きいことが、一目で分かる。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

教訓

58

ツールでできることの「本質」は変わらないけど「効率」は大きく変わる。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.59

3. ログ収集と可視化

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

60

事件は現場で起きているのか?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

なぜログ収集が必要なのか?実際に問題が起きているかどうかの、貴重な証拠になるため。「この機能、本当にきちんと動いてるの?」 → 500エラーが○回発生している!

「文字列を + で結合しているから遅くなる」 → この機能の平均レスポンスタイムは○秒である

61

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

なぜ可視化が必要なのか?状況が一目で分かるみんなで同じものを見られる→ 野球のスコアボードと同じ

62

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

63

っていうか可視化しないと

どうせ見ないでしょ!?

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

64

きっと、きちんと動いているだろう(不安だけど)

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

65

きっと、パフォーマンスも良好だろう(不安だけど)

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

66

楽観的推測ではなくきちんとログで確認するため

に可視化が必要

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

67

つまりログ可視化はエンジニアの「責任」

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

68

じゃ、何を見ましょうか

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

69

CPU 使用率

メモリ使用量

アクセス数レスポンスタイム

処理成功数

遅いSQL

リソースログ ○ ○アクセスログ ○ ○ ○スロークエリ ○

他にも・・・ GCログ、I/Oサイズ、スレッド数、セッション数など

すぐに見たい情報と、収集元ログの例

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

70

そしてログ可視化、と言えば。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

71

Elasticseach+

Kibana

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

72

簡単に、小さく、今すぐ始められる

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

ログの収集と分析(1) Elasticsearch(蓄積)

• リアルタイム検索・解析エンジン• 平たく言えば、ログの検索システム

(2) Kibana(可視化)• ログ検索&可視化ツール• 平たく言えば、Elasticsearchのフロントエンド

73

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

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

75

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

76

ログを可視化した結果

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化(アクセス数)

77

↑テレビ テレビの影響↑

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化(上:アクセス数、下:エラー数)

78

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化(上:アクセス数、下:レスポンスタイム)

79

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化(上:レスポンスタイム、下:スロークエリ)

80

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

普段から、キャパシティぎりぎりのようだTVが来た時に増えたアクセス数が、503エラーにせざるを得ない。

レスポンス悪化するタイミングと、スロークエリが悪化するタイミングが完全に一致。つまりDBネック。→あとは、ネックのSQLを改善するだけ。

81

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

さらなる可視化ROI(投資対効果)コンバージョンレート(成約率)売り上げ

82

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

3. ログ収集と可視化

さらなる可視化ROI(投資対効果)コンバージョンレート(成約率)売り上げ→何の話しとんねん、ここJava Day Tokyoやぞ!

83

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.84

4. インフラの改善

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

4. インフラの改善

85

すぐに、AWS、AWS言いやがって・・・

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

4. インフラの改善

86

なので僕もAWSにしました。

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

4. インフラの改善

87

大規模改修のタイミングでREST API化 + AWS化

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

4. インフラの改善

88

既存の周辺システムとはDirectConnectで接続

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

4. インフラの改善

89

I love AWS❤

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.90

まとめ

Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.

まとめ

「理論的に」ではなく「今そこにある問題」を解決するための手法を考えることが重要。パフォーマンス問題は、Javaのコマンドラインツールを使って一瞬で絞り込め!ログを見よう! そのために、可視化重要。

91

Copyright © Acroquest Technology Co., Ltd. All rights reserved.92

ログの可視化はエンジニアの責任だと思ってやりましょう!