パフォーマンス最適化

パフォーマンスプロファイリング ぱふぉーまんすぷろふぁいりんぐ

プロファイリングボトルネックパフォーマンスチューニングフレームグラフCPUプロファイルメモリプロファイル
プロファイリングって何のためにやるの?

簡単に言うとこんな感じ!

プロファイリングは「アプリのどこで時間がかかってるか・どこでメモリを食ってるか」を計測することだよ!「なんか遅いな」という勘で最適化するんじゃなく、「このDB呼び出しに90%の時間がかかってる」という事実に基づいて改善できるんだ。


パフォーマンスプロファイリングとは

パフォーマンスプロファイリング(Performance Profiling) とは、アプリケーションの実行中にどの関数・処理でどれだけのCPU時間・メモリを消費しているかを計測・分析する手法です。

「90/10の法則」(パフォーマンスの問題の90%は、コードの10%に起因する)に基づき、ボトルネックを特定してから最適化することが重要です。感覚的な最適化は無駄になることが多く、プロファイリングによる事実ベースのアプローチが効果的です。


プロファイリングの種類

種類内容
CPUプロファイリング関数ごとのCPU使用時間・呼び出し回数を計測
メモリプロファイリングヒープ使用量・オブジェクト生成数・メモリリーク検出
I/Oプロファイリングディスク・ネットワークI/Oのボトルネック特定
DBクエリプロファイリングスロークエリの特定(EXPLAIN ANALYZE等)

フレームグラフ(Flame Graph)

CPU時間の使用状況を視覚化したグラフ。幅が広い=時間を多く使っているを意味し、どの関数スタックがボトルネックかを一目で把握できます。


主なプロファイリングツール

ツール対象
Chrome DevTools(Performance)フロントエンドJS・レンダリング
py-spy / cProfilePython
JProfiler / async-profilerJava/JVM
pprofGo
Datadog APM本番環境の分散トレーシング

歴史と背景

  • 1970年代:gprof(GNUプロファイラ)がUnix環境で開発
  • 2000年代:JVMプロファイラが成熟しJavaパフォーマンスチューニングが体系化
  • 現在:APM(Application Performance Monitoring)ツールで本番環境の継続的プロファイリングが可能に

関連用語