CPU と割り当てプロファイリングの概要
このトピックでは、CPU と割り当てのプロファイリングの基本概念について説明します。これらの概念は、IntelliJ プロファイラーの動作を理解できます。
IntelliJ プロファイラーの仕組み
CPU および割り当てプロファイリングの場合、IntelliJ IDEA は次のプロファイラーとの統合を提供します。
Java Flight Recorder – JDK の一部として提供される標準のプロファイリングツール。
非同期プロファイラー – ネイティブコールおよびメモリ割り当てデータも収集できる非常に正確なプロファイラー。
デフォルトでは、IntelliJ IDEA は両方のプロファイラーを並行して実行して、最も正確な結果を提供します。サポートされているプロファイラーを個別に使用することもできますが、ほとんどのシナリオでは、すぐに使用できる組み合わせ構成の方が適しています。このアプローチでは、両方のプロファイラーの利点を活用し、非常に特殊な要件がない限り、セットアップを一切不要にします。
IntelliJ プロファイラーは、CPU と割り当ての両方のプロファイリングデータを収集します。これが何を意味するのか、簡単に説明します。
CPU プロファイリング
CPU プロファイリングは、実行中のすべてのスレッドのスタックトレースを定期的に収集することで機能します。これを実現するために、IntelliJ プロファイラーは JVM と OS API の両方を使用します。これにより、ネイティブ部分の詳細を把握でき、JVM のみをクエリするプロファイラーでは通常失敗する特殊なケースでも、正確な JVM プロファイリングが保証されます。
IntelliJ IDEA のプロファイラーはサンプリングを使用します。つまり、インストルメンテーションベースのプロファイラーが行うすべてのメソッドのエントリと終了をキャプチャーする代わりに、IntelliJ プロファイラーは一定の間隔でスタックトレースのみを取得します。
![スタックトレースのキャプチャーを示すダイアグラム Diagram illustrating the capturing of stack traces](https://resources.jetbrains.com/help/img/idea/2024.1/sampling.png)
これにより、データのごく一部が犠牲になり、全体像には影響しませんが、プロファイルされたアプリケーションのフットプリントが最小化されるなど、いくつかの重要な利点がもたらされます。これにより、物事の偏りのないビューが得られ、パフォーマンスにほとんど影響を与えることなく、本番環境でアプリケーションのプロファイルを作成することもできます。
メモリ割り当てプロファイリング
IntelliJ プロファイラーはメモリ割り当てイベントに反応します。このようなイベントが発生すると、IntelliJ プロファイラーは要求元のスレッドの呼び出しスタックと割り当てられたオブジェクトのタイプを記録します。
この情報は、特定のタイプの割り当てを説明するコードパスと、これらの割り当ての大きさを理解できます。
CPU プロファイリングと同様に、プロファイラーは、意味のあるイメージを形成するのに十分なデータのみを記録することにより、フットプリントを最小限に抑えます。
プロファイリングワークフロー
通常、プロファイリング手順は次の手順で構成されます。
データを収集します。プロファイラーは、アプリケーションの開始時にアタッチすることも、後でアタッチすることもできます。プロファイリングを停止すると、IntelliJ IDEA がスナップショットを生成します。
プロファイルを開いて分析します。このステップでは、組み込みツールを使用して、生データを意味のある形式で整理し、必要に応じてスライスすることができます。分析へのアプローチは、ゴールによって異なる場合があります。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.1/profiler-flame-graph-1.png)
チュートリアル: CPU プロファイリングを開始する
アプリが機能することもありますが、スループットを向上させたり、レイテンシを短縮したりしてパフォーマンスを向上させたい場合があります。また、実行時にコードがどのように動作するかを知りたい、ホットスポットがどこにあるかを判断したい、フレームワークが内部でどのように動作するかを理解したい場合もあります。IntelliJ IDEA は静的に生成できるあらゆる種類の手がかりを提供するため、部分的には設計時にこの情報を得ることができます。もちろん、実行時には物事がさらに複雑になるため、コードを見るだけですべ...
![](https://resources.jetbrains.com/help/img/idea/2024.1/profile-rc.png)
スナップショットを作成して開く
このトピックでは、スナップショットを作成する手順について説明します。データを収集したら、スナップショットをすぐに分析したり、後で使用するために保存したり、他の人に送信したりできます。前提条件:デフォルト設定を使用して、ほとんどのアプリケーションのプロファイルを作成できます。Linux を使用している場合、またはカスタムプロファイラーを使用する場合を除いて、構成は必要ありません。すべてがすぐに機能します。IntelliJ プロファイラーは次の実行構成をサポートしています。アプリケーション Spri...
![](https://resources.jetbrains.com/help/img/idea/2024.1/switch-between-cpu-and-allocations.png)
プロファイラーのスナップショットを読む
IntelliJ プロファイラー構成で作成されたスナップショットは、次のモードで表示できます。CPU 時間 – IO、ロック待機、コンテキスト切り替えなどを除く、実際の CPU 作業に対応するサンプルのサブセット。アルゴリズムの複雑さの改善などの最適化から最大限のメリットを得ることができる、CPU 集中型のセクションを特定できます。合計時間 – スリープ状態のスレッドのサンプルを含むすべてのサンプル。このモードは、IO、コンテキスト切り替えオーバーヘッド、同期などを含む、知覚されるパフォーマンスと実...
![](https://resources.jetbrains.com/help/img/idea/2024.1/cpu-memory-charts-leak.png)
CPU とメモリのライブチャート
IntelliJ IDEA は、実行中のプロセスのライブパフォーマンス統計を監視する方法を提供します。静的な数値を表示するのとは対照的に、ライブデータは、リソース消費を視覚化し、リソース関連のボトルネックを特定し、特定のイベントがプログラムのパフォーマンスにどのように影響するかを理解できます。例: 下の図では、ヒープメモリチャートでメモリリークがどのように見えるかを確認できます。原因を解明するだけで十分な場合もあれば、それが不十分な場合は、さらに調査するための手がかりを与えることができます。CP...