$30 off During Our Annual Pro Sale. View Details »

アプリケーションパフォーマンスの計測と改善の方法を勉強している話

kumico
September 17, 2023

 アプリケーションパフォーマンスの計測と改善の方法を勉強している話

2023/08/25のフレッシュメンLT #0で発表した資料になります。
https://connpass.com/event/285559/

kumico

September 17, 2023
Tweet

Other Decks in Programming

Transcript

  1. アプリケーションパフォーマンスの計測
    と改善の方法を勉強している話
    Takumi Katase
    フレッシュメン夏祭りLT #0

    View Slide

  2. 自己紹介
    ● Takumi Katase
    Twitter: @devoc_
    ● SRE
    ● Linux/Go/Terraform/Vim
    ● 🍜 / Game / Anime

    View Slide

  3. アジェンダ
    ● ベンチマーク
    ● プロファイル
    ● 分散トレース

    View Slide

  4. アジェンダ
    ● ベンチマーク
    ● プロファイル
    ● 分散トレース

    View Slide

  5. ベンチマーク
    HTTP Requests
    Server

    View Slide

  6. ベンチマーク
    Server
    Output
    ● Latency
    ● Throughput
    ● etc . . .

    View Slide

  7. ab - Apache HTTP server benchmarking tool
    https://httpd.apache.org/docs/2.4/programs/ab.html

    View Slide

  8. ab - Apache HTTP server benchmarking tool

    View Slide

  9. ab - Apache HTTP server benchmarking tool

    View Slide

  10. 負荷を観察する
    HTTP Requests
    Server
    👀
    システムリソースの
    状態を観察する

    View Slide

  11. top - display Linux processes

    View Slide

  12. top - display Linux processes
    👈

    View Slide

  13. 観察結果から次の行動を決定する
    ● MySQLのプロセスがCPUを多く(90%くらい)使っている
    ● MySQLがボトルネックになってそう
    ● スロークエリ調べてみよう
    ● . . . . . .

    View Slide

  14. サイクルを回す
    ベンチマーク
    解析
    改善

    View Slide

  15. Other tools
    ● k6
    ○ シナリオを記述
    ○ 実際の利用状況に近い負荷を与えられる
    ● perf
    ○ Linuxのプロファイラ
    ○ 超多機能。よりハードウェアに近いCPUの振る舞いを分析
    できる

    View Slide

  16. https://gihyo.jp/book/2022/978-4-297-12846-3

    View Slide

  17. アジェンダ
    ● ベンチマーク
    ● プロファイル
    ● 分散トレース

    View Slide

  18. プロファイル
    システムパフォーマンスの分野で
    は、プロファイリング(profiling)
    とは、サンプリングツールの使用
    という意味である。
    計測値のサブセット(サンプル)を
    取り、対象のおおよその姿を描く
    のである。
    https://www.oreilly.co.jp/books/9784814400072/

    View Slide

  19. CPU プロファイル

    View Slide

  20. CPU プロファイル
    main()
    addAB()
    getA() getB()

    View Slide

  21. CPU プロファイル
    main()
    addAB()
    getA() getB()
    1s
    1s
    0.3s 0.6s

    View Slide

  22. スタックトレース
    スレッド
    スタック
    レジスタ
    プログラム
    カウンタ
    プロセス
    スレッド スレッド

    View Slide

  23. スタックトレース
    スレッド
    スタック
    レジスタ
    プログラム
    カウンタ
    プロファイラ
    プロファイラがスタック内
    に保存されているリターン
    アドレスを解析する

    View Slide

  24. package “net/http/pprof”
    https://pkg.go.dev/net/http/pprof
    Package pprof serves via its HTTP server runtime profiling
    data in the format expected by the pprof visualization tool.

    View Slide

  25. package “net/http/pprof”

    View Slide

  26. package “net/http/pprof”

    View Slide

  27. package “net/http/pprof”

    View Slide

  28. アジェンダ
    ● ベンチマーク
    ● プロファイル
    ● 分散トレース

    View Slide

  29. 分散トレース
    分散トレースは、単に相互に関連
    した一連のイベントです。分散ト
    レースシステムは、これらの関係
    を追跡する作業を「自動的に魔法
    のように」作成し、それを管理す
    る、パッケージ化されたライブラ
    リ を提供します。
    https://www.oreilly.co.jp/books/9784814400126/

    View Slide

  30. OpenTelemetry
    https://opentelemetry.io/docs/what-is-opentelemetry/
    OpenTelemetry は、トレース、
    メトリクス、ログなどのテレメ
    トリ データを作成および管理す
    るために設計された
    Observability フレームワークお
    よびツールキットです。

    View Slide

  31. OpenTelemetry
    https://github.com/catatsuy/private-isu
    private-isu app
    OpenTelemetry SDK
    計装

    View Slide

  32. Trace

    View Slide

  33. Trace

    View Slide

  34. Trace

    View Slide

  35. Trace

    View Slide

  36. OpenTelemetry
    private-isu
    app
    OpenTelemetry
    SDK
    計装

    View Slide

  37. OpenTelemetry
    private-isu
    app
    OpenTelemetry
    SDK
    計装

    View Slide