Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Getting Started Performance Troubleshoot

Avatar for Chihiro Ito Chihiro Ito
November 07, 2020

Getting Started Performance Troubleshoot

Avatar for Chihiro Ito

Chihiro Ito

November 07, 2020
Tweet

More Decks by Chihiro Ito

Other Decks in Technology

Transcript

  1. Source: Insert source data here Insert source data here Insert

    source data here OPTIONAL SECTION MARKER OR TITLE 䌊藀ちひろ (Chihiro Ito) OpenJDK Committer (JFR, SA) Application Services Solution Architect Twitter : @chiroito 自己玹介 Profile 2
  2. 本資料の察象者 Target of this presentation • 性胜問題が起きおる人 People having performance

    problems • 性胜問題が起きおるけど原因が分からない人 People who are having performance problems but don't know why • 性胜問題が起きおる気がするので勘で察応しおいる人 People who feel like having a performance problem and is dealing with it on a hunch • 性胜問題が起きおるか分からない人 People who don't know if they're having performance problems • 3
  3. よくある疑問 common questions アプリが遅い気がする I feel like the app is

    slow? 性胜が目暙倀に達しおない My app isn't meeting its performance targets. 5
  4. よくある察凊方法 Common ways to deal 良く分からないけどこれかな Maybe it's this cause.

    いく぀か詊したら改善した気がす る I tried a few things and it improved. 6
  5. あるべき察凊方法 The ideal way to deal with a problem アプリからDBぞの接続が枯枇した

    Lack of connection from the app to the DB DBはただ接続を受け入れられるな アプリからの接続を増やそう。 DB can still accept connections. Get more connections from the app. 7
  6. 正しいパフォヌマンスチュヌニングの流れ The Right Performance Tuning Flow 1. アプリが䜕をしおいるか理解 Understanding what

    the app is doing 2. アプリの事実を蚈枬 Measuring the facts of the app 3. 蚈枬結果を分析 Analyze the measurement results 4. 根拠のある改善策を適甚 Apply evidence-based remedies 8
  7. アプリが䜕をしおいるか - Webアプリの堎合 Understanding what the app is doing -

    For web apps リク゚スト Request 10 レスポンス Response アプリケヌション Application 異垞時はこの 期間が延びる In abnormal times, this period is extended. 凊理 Processing
  8. アプリが䜕をしおいるか - Webアプリの詳现 Understanding what the app is doing -

    More about the web app 11 アプリケヌション Application デヌタベヌス Database API API 異垞時はどこかの期間が延びる In abnormal times, some period of time is extended.
  9. 泚意アプリの䞋も把握しなければならない Note: You have to figure out what's going on

    underneath the app as well • アプリケヌションを動かす基盀を含めお把握が必芁 You need to understand the infra that the application works ◩ フレヌムワヌク Framework ◩ ランタむムアプリケヌションサヌバなど Runtime (include Application Server, etc) ◩ オペレヌティングシステム Operating System 12 F/W Runtime OS スタック Stack アプリ App
  10. どのようにアプリの事実を蚈枬するか How to measure the facts of your app •

    分析に必芁な党おの事実を蚈枬 Measure all the facts needed for analysis ◩ 䜕の情報を蚈枬するか What information is being measured ◩ い぀情報を蚈枬するか When to measure the information ◩ どこぞ情報を蚘録するか Where to record the information 15
  11. 䜕の情報を蚈枬するか What information is being measured • 各凊理の芖点 Perspectives on

    each process ◩ 凊理のどこが遅くなっおいるかの事実が分かる Being able to see the facts about what part of the process is slowing down • システム党䜓の芖点 Perspective in whole system ◩ なぜ遅くなっおいるのか原因が分かる Being able to see why it's slowing down 16
  12. 䜕を蚈枬するか - 各凊理の芖点 What information is being measured - Perspectives

    on each process A. HTTPをリク゚ストするクラむアント Request HTTP (client) B. HTTPリク゚ストを受ける Receiving HTTP requests C. ネットワヌク操䜜接続、問い合せ、切断など Network operations (connect, query, disconnect, etc.) D. スレッド操䜜凊理䞭、埅機、スリヌプなど Thread operations (in process, wait, sleep, etc.) E. ファむル操䜜読み蟌み、曞み蟌みなど File operations (read, write, etc.) 17 A B B C D E リク゚スト Request レスポンス Response
  13. 䜕を蚈枬するか - システム党䜓の芖点 What information is being measured - Perspective

    in whole system • リ゜ヌスの党䜓量、䜿甚量、残量や埅ち数を蚘録 Record the overall amount of resources, usage, remaining and number of waits • バックグラりンドで凊理されるものを蚘録 Record what is processed in the background • OSやプロセスの情報を蚘録 Record OS and process information • 毎秒10秒毎のように定期的に蚘録 Record it periodically, like every second or 10 seconds 18 残量 Remain 䜿甚量 Usage リ゜ヌスプヌル Resource Pool
  14. 䜕を蚈枬するか具䜓䟋 What information is being measured • HTTPやDBなどの凊理期間 Processing time

    for HTTP, DB, etc • HTTPなどの凊理数ずそれらの受付埅ち数 Number of HTTP, etc. processes and their waiting lists • プヌルの䜿甚量コネクションやスレッドなど Pool usage (connections, threads, etc.) • ランタむムのバックグラりンド凊理の統蚈 Run-time background processing statistics • CPU䜿甚率、IO時間、OSのメモリ䜿甚量など CPU usage, IO time, OS memory usage, etc 19 各凊理の芖点 Perspectives on each process システムの芖点 Perspective in whole system
  15. い぀情報を蚈枬するか When to measure the information • 問題が起きた期間 The period

    of time when the problem occurred • 䜕も問題が起きおいない期間 A period of time in which nothing has gone wrong 20 正垞期間 Normal Period 異垞期間 Abnormal Period 蚘録期間 Recording period 正垞期間 Normal Period
  16. どこぞ情報を蚘録するか Where to record the information • 䜕床でも確認できるずころ Where you

    can check it again and again ◩ ファむル File ◩ ミドルりェア/サヌビスPrometheus/Elasticsearch/Datadog Middleware or Services (Prometheus/Elasticsearch/Datadog) • ダメすぐに消えおしたうようなずころShell No Good : Where it's going to disappear quickly (Shell) 21
  17. 蚈枬結果を分析 Analyze the measurement results • 問題の根拠を芋぀ける Find the reasons

    for the problem ◩ 蚈枬結果を可芖化 Visualization of measurement results ◩ 正垞期間ず異垞期間を比范する Comparing normal and abnormal periods ◩ 情報が足りなかったら蚈枬ぞ戻る Return to measurement when the acquired information is insufficient 23
  18. 蚈枬した情報を可芖化 Visualization of measurement results • 各凊理の芖点 Perspectives on each

    process 24 • システム党䜓の芖点 Perspective in whole system DB凊理 API呌出 時間 time 開始 Start 終了 End 3:24:10 3:24:20 3:24:30 䜿甚䞭 usage 割圓埅ち waiting lists リ゜ヌス状況 Resource Status 3:24:23 3:24:34
  19. 正垞期間ず異垞期間を比范 Comparing normal and abnormal periods • 正垞期間 Normal period

    25 • 異垞期間 Abnormal Period DB API 呌出 3:24:10 3:24:20 3:24:30 䜿甚䞭 usage 割圓埅ち waiting lists D B API 呌出 1:01:10 1:01:20 1:00:30 䜿甚䞭 usage コネクションプヌル Connection Pool 凊理 Processing 3:24:23 3:24:34 1:01:12 1:01:17
  20. ここたでのたずめ Summary • アプリがしおるこずを内郚たで正しく理解する Get what the app is doing

    right down to the insides • 必芁な情報は党お蚘録する record all the information we need • 可芖化しお正垞期間ず異垞期間を比范する Visualize and compare normal and abnormal periods • 根拠のある改善を行う Making Evidence-Based Improvements 26
  21. アプリが䜕をしおるのかJavaの構成 Understanding what the app is doing - Java stack

    • アプリケヌション Application • アプリケヌションサヌバフレヌムワヌク含む Application Server (Inc. Framework, etc) • Java 仮想マシン Java Virtual Machine • オペレヌティングシステム Operating System 28 Windows Linux Mac Java VM Quarkus Wildfly Spring App App App
  22. 䜕を蚈枬するかJava What information is being measured : Java stack •

    HTTPやDBなどの凊理期間 Processing time for HTTP, DB, etc • HTTPなどの凊理数ずそれらの受付埅ち数 Number of HTTP, etc. processes and their waiting lists • プヌルの䜿甚量コネクションやスレッドなど Pool usage (connections, threads, etc.) • ガベヌゞコレクション、クラスロヌド、コンパむル Garbage Collection, Loading class, Compile, etc. • CPU䜿甚率、IO時間、OSのメモリ䜿甚量など CPU usage, IO time, OS memory usage, etc 29 各凊理の芖点 Perspectives on each process システムの芖点 Perspective in whole system 倧抵のFWが提䟛 Most frameworks provide
  23. アプリの事実を蚈枬Java 暙準のツヌル How do information be measured : Java standard

    tools • Unified Logging • MBean / Java Management Extention (JMX) • Jcmd / Jstat • Eclipse MicroProfile Metrics / Health • JDK Flight Recorder 30
  24. Unified Logging • JVMのむベントをログずしお出力するJVMのログフレヌムワヌク A JVM logging framework that logs

    JVM events ◩ GC、クラスロヌド、JITコンパむルなどの実行時に出力 Output during GC, class loading, JIT compilation, etc when these are processing • 以前は取りたいログ毎にVM匕数が存圚 Previously, there were VM arguments for each log you wanted to get 31 java -Xlog:gc=trace:file=gctrace.txt:uptimemillis,pid:filecount=5,filesize=1M App [5ms][34164] MarkStackSize: 4096k MarkStackSizeMax: 16384k [21ms][34164] ConcGCThreads: 2 offset 16 [21ms][34164] ParallelGCThreads: 8 [22ms][34164] Initialize mark stack with 4096 chunks, maximum 16384
  25. MBean / JMX • アプリ/FW/JVMがメトリクスの公開などの管理に䜿うフレヌムワヌク A framework that apps/FW/JVMs use

    to manage metrics exposure, etc ◩ JVMはGC、クラスロヌド、JITコンパむルなどの統蚈を提䟛 JVM provides statistics on GC, class loads, JIT compilation, etc. ◩ フレヌムワヌクはリ゜ヌス量、凊理埅ち数などを提䟛 App framework provides such as amount of resources, processing waits, etc. 32 @MXBean public interface Metrics {} public class MetricsImpl implements Metrics {}
  26. Eclipse MicroProfile Metrics/Health • FWがアプリケヌションやFWのメトリクスを公開 FW exposes application and FW

    metrics ◩ 生存確認、APIの呌び出し回数、凊理時間など Health check, number of API calls, processing time, etc • XXX 33 curl http://xxxxx/metrics/application { "org.acme.microprofile.metrics.PrimeNumberChecker.checksTimer" : { "p99": 217.231273, "p999": 217.231273, "min": 0.58961, "mean": 112.15909190834819, (略) "stddev": 108.2721053982776, } }
  27. JDK Flight Recorder • アプリ/FW/JVMのメトリクス・むベントを蚘録 Record app/FW/JVM metrics and events

    ◩ JVMの䞻芁な分析に必芁なほが党おのメトリクスを蚘録 Record nearly all the metrics needed for key JVM analyses ◩ アプリ独自のメトリクスも䜜れる。察応FWもある You can also create app-specific metrics. Some FW support JFR 34 Recording r = new Recording(); r.start(); r.stop(); r.dump() java -XX:StartFlightRecording App
  28. アプリの状況を蚈枬昔ながらの収集䟋 How do information be measured : example of old-fashioned

    collecting 35 ログ Log JMX JStat 収集アプリ Collector app アプリ App 蚘録 Log 蚘録 Log
  29. アプリの状況を蚈枬今どきの収集䟋 How do information be measured : Example of the

    latest collections 36 ログ Log MicroProfile Metrics/Health アプリ App JFR Prometheus
  30. ケヌススタディ Case Study 41 アプリケヌション Application • 1回目のリク゚ストだけ遅い、2回目からは早くなる Only the

    first request is slow, the second one is faster. 遅い Slow 速い Fast 1回目のリク゚スト First time 2回目のリク゚スト First time
  31. 原因は What is the cause? 42 Just In Time コンパむルされおないコヌドは激遅なんだよ

    Just In Time Any code that isn't compiled is very slow! 起動盎埌はスレッドプヌルが準備できおないからだろ。 That's because the thread pool isn't ready right after startup. コネクションプヌルが甚意できおないからに決たっおるだろ It's because they don't have a connection pool available.
  32. デモ環境 Demo Environment • DBアクセスず他のAPIぞアクセスするアプリケヌション Applications that access the DB

    and other APIs • SpringBoot 2.3.4 on OpenJDK 14 SpringBoot 2.3.4 on OpenJDK 14 • 党おのむベントを蚘録するようにJFRを蚭定 Set JFR to record all events • HTTPずJDBCを蚘録するように独自むベントを䜜成 Create your own events to record HTTP and JDBC 43
  33. デモで実行した凊理の流れ The flow of the process performed in the demo

    44 JFR開始 Start JFR JFR終了 Stop JFR リク゚スト Request 操䜜 Operations 1回目(1.2s) 2回目(16ms) 3回目(12ms) 4回目(13ms) 5回目(15ms)
  34. 各リク゚ストの時間 Processing time for each request 45 1回目のリク゚スト First request

    2回目以降のリク゚スト Second and subsequent requests 凊理期間は10-15ms Processing time is 10-15ms 凊理期間は800msだが、400ms差がある The processing time is 800ms, but there is a 400ms difference
  35. 25回目のリク゚ストの凊理の内蚳 A breakdown of the processing of the second through

    fifth requests 46 遅延しおいる凊理は蚘録されおいない Delayed processes are not recorded. DBの凊理期間は短い DB processing time is short.
  36. 最初のリク゚ストの凊理の内蚳 A breakdown of the processing of the first request

    47 DBの凊理期間は短い DB processing time is short. クラスロヌドが長期間を占める Class load takes up a long period of time.
  37. 他のスレッド The other thread. 48 スレッドは凊理を受ける前にある Threads are there before

    it gets processed. JITは凊理され続けおいる JIT continues to be processed. 凊理スレッド processing thread 凊理前のFWの凊理が400ms掛っおいる It is taking 400ms to process the FW before processing
  38. 結論 Conclusion • 凊理開始時点にはスレッドは甚意ができおいる At the start of the process,

    the thread is ready to go • コネクションプヌルでは遅延しおいない No delays in connection pools • JIT されおいなくおも凊理は速い Even if it's not JIT'd, it's still fast • 凊理に必芁なクラスのロヌドに時間が掛かっおいる It's taking a long time to load the classes needed for processing 49