Contenu connexe
Similaire à 実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
Similaire à 実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡 (20)
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
- 2. Copyright © Acroquest Technology Co., Ltd. All rights reserved.
自己紹介
2
• 谷本 心 (Shin Tanimoto)
- Acroquest Technology株式会社
- 開発&トラブルシュート教育
- JavaOneスピーカー
- JJUG / 関ジャバ / S2JSFコミッタ
- Twitter : @cero_t (日本語)
- Facebook : shin.tanimoto (英語)
- 3. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
世の中のシステムは
完璧だろうか?
3
- 4. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
最近、あなたが
リリースしたシステムは
完璧だろうか?
4
- 5. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5
- 6. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
私の名は@cero_t!
完璧ならざるシステムに
戦いを挑む、
君の友人である!
6
- 7. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
ここで滑るのも
想定の範囲内である!
7
- 8. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
8
皆さんもご存知の通り
世の中のシステムは
往々にして問題を抱えている
- 9. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
処理が遅い
大量アクセスを捌けない
セキュリティの脆弱性がある
システムエラーが発生する
直そうにもソースの可読性が低い
9
- 10. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
10
では、今日お話する
システムは?
- 11. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
とある有名企業のECサイト
TV番組でもよく取り上げられる企業。
そのブランドのファンも多い。
ECサイトの月間PVは1000万ぐらい。
秒間アクセス数は10∼1000ぐらい。
11
- 12. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
12
←TV放送前に起動
システム構成
- 13. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
13
しかし、
- 14. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
とにかく処理が遅い!
検索に30秒ぐらい掛かる。
購入に1∼3分ぐらい掛かる。
大量アクセスを裁けない!
TV放送時にシステムダウン。
購入しようとした人も諦める。
セキュリティの脆弱性がある!
詳しく話せるわけないだろ!
14
- 15. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
システムエラーが発生する!
購入時のシステムエラーが毎日数十回。
たまに金額を間違える(!)
直そうにもソースの可読性が低い!
ネストは10段ぐらい余裕。
ifとelseで同じ処理を書くとか余裕。
複雑度とか200ぐらい余裕。
15
- 16. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
元の開発会社には、直せない!
そもそも、ちゃんと作れない。
問題を直すと、他の問題を発生させる。
他の開発会社にも、直せない!
A社「これはイチから作り直しですね」
B社「これは作り直すこともできませんね」
弊社「やりましょう」
16
- 17. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
完璧ならざるシステム
17
_人人人人人人人人_
> やりましょう <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
- 18. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
アジェンダ
トラブルシュートの方針
Mission 1 : 検索処理を高速化せよ!
Mission 2 : 購入エラーをぶっ潰せ!
Mission 3 : 大量アクセスを捌ききれ!
システムの今後
18
- 19. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
最初の方針
(1) Seleniumの自動試験を作成しよう
–直す過程で壊すことがないように。
(2) Checkstyle / FindBugsを掛けつつリファクタ。
– 可読性を向上させながら、ソースを理解しよう。
その結果・・・
19
- 20. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
ダメでした。
20
- 21. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
何がダメだったのか?
(1) 300KLもあるクソコード。
– しかも大半がデッドコード。
(2) 試験項目の作成中にもエラーが頻発。
– まともに試験項目が作れない。
(3) その間にも、本番システムではエラーが多発。
– 事件は現場で起きてるんだ!
21
- 22. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
22
トリアージ
- 23. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
23
「一番の問題は何か?」
- 24. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
24
一番の問題は
「購入に失敗する」
ということ
- 25. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
購入に失敗する理由
(1) 購入時にシステムエラーが起きる。
(2) 検索が遅くて、購入まで りつけない。
(3) TV放送などでアクセスが集中すると、
システムがダウンしてしまう。
25
- 26. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
26
これらの改善こそ
「顧客が望むこと」
である
- 27. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
27
では、どうやって
重要な問題を見つけるか?
- 28. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
「現場で起きている問題」を掴む
(1) エラーの発生頻度
• HTTPステータス
• アプリケーションエラー
(2) 性能の傾向
• レスポンス時間
• アクセス数とレスポンス時間の関係
• レスポンス悪化時のリソース状況
(3)その他の典型的な問題
28
- 29. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
どうやって現場の問題を掴むのか?
(1) ログの収集
• アクセスログ
• アプリケーションログ
• MySQLのスロークエリログ
(2) 低負荷な解析ツールの適用
• ENdoSnipe
29
- 30. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
30
ログ分析が必要だ。
そうだ、
Elasticsearchを使おう。
- 31. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
31
- 32. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
ログの収集と分析
(1) Elasticsearch(蓄積)
• リアルタイム検索・解析エンジン
• 平たく言えば、ログの検索システム
(2) Kibana(可視化)
• ログ検索&可視化ツール
• 平たく言えば、Elasticsearchのフロントエンド
(3) fluentd(収集)
• 各サーバで動くログ収集のエージェント
• 平たく言えば、ログをtailしてElasticsearchに送るヤツ
32
- 33. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
典型的な問題の検出
(1) ENdoSnipe
• OSSのトラブルシュートツール
• メモリリークや同一SQL発行回数の警告など
典型的な問題を検出する
• 平たく言えば、動的なFindBugs
33
- 34. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
Elasticsearch + Kibanaによるログ可視化
34
- 35. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
トラブルシュートの方針
35
さて、これで準備はできた。
いざ、トラシュー開始!
- 36. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
36
Mission 1
検索処理を高速化せよ!
- 37. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
問題点の確認
(1) 検索処理が、日常的に遅い。
• ページによるが、10∼30秒程度。
(2) 2∼3日に一度の頻度で、極めて遅くなる。
• 数時間で回復する or システムがダウンする。
37
- 38. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
全アクセス数(上)と、レスポンス時間(下)
38
- 39. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
全アクセス数(上)と、レスポンス時間(下)
39
10件/秒
100件/秒
30秒
20秒
10秒
- 40. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
時々発生する、 のレスポンス劣化
40
- 41. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
時々発生する、 のレスポンス劣化
41
3000秒
2000秒
1000秒
- 42. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
レスポンス劣化時のMySQLスロークエリログ
42
ほぼ間違いなくDB要因の問題
- 43. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
レスポンス劣化時のMySQLスロークエリログ
43
2000秒
1000秒
ほぼ間違いなくDB要因の問題
- 44. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
でも、なんで線形的に駆け上がるの?
44
ちなみに、スロークエリはすべて
同じストアドプロシージャだった
- 45. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
45
仮説
1. ストアドの中でテーブルロックしている?
2. DBコネクション数の上限まで至っている?
3. CPUがボトルネック?
4. ディスクI/Oのボトルネック?
- 46. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
46
ENdoSnipeの結果を確認
1. 同一のSQLを1万回ぐらい実行している
という警告が出ていた
→数回のSQLで済むよう修正。
→改善はしたが、まだ遅い。
- 47. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
47
スロークエリのストアドプロシージャを精査
1. Temporary Tableに数万件のinsert
2. 明らかに無駄な処理が多数
→とりあえず無駄な処理を削って様子見
→問題は改善されず (^^;;
3. Temporary Tableをon memoryで作成するよう
create temporary table文を修正&メモリチューニング
→その結果・・・
- 48. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
結果・・・ディスクI/Oが激減!
48
- 49. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
結果・・・I/O wait激減!
49
- 50. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
同等の負荷が
掛かった時の
CPU使用率比較
その差は歴然!
50
- 51. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
MySQLスロークエリも大幅改善
51
- 52. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 1 : 検索処理を高速化せよ!
MySQLスロークエリも大幅改善
52
500秒
100秒
なんか重いバッチ。キニシナイ!
- 53. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
53
Mission 1
検索処理を高速化せよ!
→撃破!
- 54. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
54
Mission 2
購入エラーをぶっ潰せ!
- 55. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 2 : 購入エラーをぶっ潰せ!
問題点の確認
(1) 購入処理の途中でエラーが発生する
• システム内要因(NullPointerExceptionなど)
• 外部システム要因(応答なし、など)
(2) お客様からのクレームで気づくことも。
(3) カード決済など絡んでいるので、色々まずい。
55
- 56. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 2 : 購入エラーをぶっ潰せ!
問題解決へのアプローチ
(1) 購入処理の開始時にロギング。
(2) 処理の途中、終了時にもロギング。
(3) ログを解析して、
正常終了した処理と、
終了していない処理に分類。
→分類後に可視化
56
- 57. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 2 : 購入エラーをぶっ潰せ!
成功(青) 失敗(赤) ユーザ起因(他)
57
この日は10件のエラー。少なめです!
- 58. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 2 : 購入エラーをぶっ潰せ!
ここでもトリアージ
(1) エラー原因ごとに発生件数を整理して、
発生件数が多いエラーから順に対応する。
(2) バグパッチを当てるたびに、
購入エラー数が半減した。
(3) 現在は、外部システム要因を除き、
ほぼエラーが発生しない。
58
- 59. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 2 : 購入エラーをぶっ潰せ!
成功(青) 失敗(赤) ユーザ起因(他)
59
この日はエラーが0件でした!
- 60. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
60
Mission 2
購入エラーをぶっ潰せ!
→いったん、撃破!
- 61. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
61
Mission 3
大量アクセスを捌ききれ!
- 62. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
問題点の確認
(1) TV放送などで大量アクセスがあると、
レスポンスが悪化し、システムがダウンする。
(2) TV放送前にはAPサーバの台数を
増やしているが、捌ききれない。
(3) 例のストアドプロシージャが、
やはりネックになっている。
62
- 63. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
問題解決へのアプローチ
(1) 同時アクセス数制限の強化
• APサーバごとに、検索処理の同時リクエスト数が
一定数を超えたら、503エラーページを表示。
(2) 検索結果のキャッシング&同時検索数を制限
• APサーバごとに、重いストアドプロシージャの
同時実行数を制限。
• 単なる順番待ちにならないよう、
後続の処理は、検索結果のキャッシュを利用。
→一定の成果は出たが、根本解決はしない。
63
- 64. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
64
困った。
スケールアウトしても
捌けないし。
- 65. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
65
ん・・・?
- 66. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
66
←スケールアウト
システム構成
↑こいつが重い
- 67. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
67
DBがボトルネックなのに
なんでAPサーバを
スケールアウトするの?
- 68. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
68
・・・スケールアウト、
やめれば?
- 69. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Mission 3 : 大量アクセスを捌ききれ!
問題解決へのアプローチ
(1) TV放送時にもスケールアウトしないよう決断。
→システムダウンはなくなった (^^;;
→レスポンス改善、
さらに購入処理の改善にも繋がった。
69
- 70. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
70
Mission 3
大量アクセスを捌ききれ!
→撃破!
- 71. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
71
このシステムの今後
- 72. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
このシステムの今後
将来的なロードマップ
1. 全面的なデザインリニューアルに伴い、
処理をRESTful APIとして再実装
2. 購入処理を非同期化
• レスポンスの高速化
• 自動リトライにより、エラーをリカバリ
3. AWS化して、HA化 / スケーラビリティも向上
72
- 73. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
このシステムの今後
将来的なロードマップ
4. Elasticsearch / Kibanaの改善 or リプレース
• シングルノードで運用しているせいか、
たまに死ぬ(今日も死んでる)
• 処理負荷が高すぎて過去ログを
流し込めない
73
- 74. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
このシステムの今後
ちなみに・・・
関連する案件もいっぱい受注できて、
弊社的には嬉しい悲鳴!
Java8 + Spring Bootで開発しているんダ!
一緒に働く仲間を募集しているヨ!
74
- 75. Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.
まとめ
1. 長期的なトラブルシュートにおいて
ログを可視化するのは、超効果的。
• 現実に起きてる問題が分かる。
• 改善効果が如実に分かる。
2. スケールアウトを間違えると怖い。
3. Java8 + Spring Bootやりたい人を
募集しているヨ!(大事なことなので2回)
75
- 76. Copyright © Acroquest Technology Co., Ltd. All rights reserved.
76
Javaならざるセッションにお付き合いいただき、
ありがとうございました!!