プロファイルの分析

Wikipedia によれば、プロファイルとは、「プログラムのスペース (メモリー) または時間の複雑性、特定のインストラクションの使用法、関数呼び出しの頻度と期間などを測定する動的プログラム分析の形式の 1 つ」です。 また、プロファイラーとは、即時にまたは後から分析に使用する目的で、そのようなプロファイルなどを生成するプログラムです。

ほとんどの場合、プロファイラーは、コード内のパフォーマンス問題またはボトルネックを識別するために、開発者によって使用されます。 プロファイラーは、開発者が個別のコード行を精査して、実行速度の低下やリソースの集中的な使用の原因を特定できるように設計されています。 プロファイル作成はコード最適化の機会を識別する手段としては非常に強力ですが、これは多くの場合、重大な問題が既に発生した後で、開発者によって開発環境内でのみ使用されます。 開発者が実稼働環境でプロファイル作成を実行しようとしても、実稼働環境にアクセスしてプロファイラーを接続することは、たとえ可能であっても非常に困難であることがあります。

Instana AutoProfile™ は、実行中のプロセスに自動的に接続されます。再始動や再構成は必要ありません。 AutoProfile を使用すると、ユーザーは、コード・レベル・パフォーマンスの継続的な分析、実動コード内のボトルネックの検出、フレーム・グラフを使用したパフォーマンスの視覚化、およびアプリケーションの「ホット・パス」の精査を行うことができます。

プロファイルを分析するには、 「Unbounded Analytics 」ビューに移動してください。 「アプリケーション 」のパンくずリストをクリックし、 「プロファイル」 を選択します。

実稼働環境でのコード・レベル・パフォーマンスの継続的な分析

AutoProfile は、実稼働環境でコードがどのように実行されるかを示すプロファイルを自動的かつ継続的に作成します。構成は必要ありません。 AutoProfile は、コード内のボトルネックを発見し、CPU プロファイルと競合プロファイルを報告するように設計されています。 CPU プロファイルを使用すると、開発者は、CPU を集中的に使用するメソッドを検出できるため、コードを効率的かつ正確に最適化できます。 競合プロファイルは、長い待機時間や CPU のマルチスレッド化機能の非効率的な使用の原因となっていて、全体的なパフォーマンスの低下をもたらしている同期化ディレクティブを示します。

フレーム・グラフを使用した視覚化

AutoProfile は、すべてのプロファイルをフレーム・グラフとして視覚化して、リソースがどこで消費されているかを容易かつ正確に確認できるようにします。 フレーム・グラフの棒のサイズは、消費されているリソースの量に応じて変更されます。 また、グラフは時系列順に並べられています。 Instana は、プロファイルを拡張する手段として、CPU 使用量や GC アクティビティーなどの有用なメトリックを提供します。 これは、プロファイルの影響を理解するために必要なコンテキストを提供するためです。

ツリービューで「ホットパス」を見つける

Instana は、すべてのプロファイルから成るツリー・ビューを提供します。正符号をクリックするだけで、関心のある領域を展開できます。 これにより、コード内の「ホット・パス」を素早く容易に発見できます。 例えば、プロファイルをクリックするだけで、パスを展開して、合計 CPU 使用量の 30 パーセントを使用しているコードを確認できます。これに基づいて、コードを改善および最適化できます。

コードの精査 (Java のみ)

フレーム・グラフまたはツリー・ビューのいずれかから、問題の原因となっている特定のコードを開きます。 パッケージ名またはクラス名でフィルタリングして、コード・パス内のコードの開始位置を素早く見つけることができます。 リンクをクリックするだけで、注目する必要があるコード行を直接精査できます。

Instana の AutoProfile は、Instana のクラス最高のパフォーマンス最適化機能の一部として完全に適合します。 AutoProfile と Unbounded Analytics™ により、開発者が必要とするすべての情報が提供されます。この情報を利用して、簡単な操作だけで、任意の問題またはリソース競合の根本原因を即時に発見できます。 これにより、アプリケーションとサービスのパフォーマンスを最適化して、最良のカスタマー・エクスペリエンスを提供できます。

プロファイル・タイプ

プロファイル作成機能は、言語、ランタイム、およびバージョンに非常に依存します。 サンプリング・メカニズムとツールの実装の差異により、言語やランタイムでのプロファイル・タイプとその可用性が異なります。 現在サポートされているプロファイル・タイプは、以下の表に要約されています。

構造という観点では、プロファイルは類似しています。 しばしば、各ノードの統計 (ヒット数、キロバイト、ミリ秒など) とともに呼び出しグラフまたは呼び出しツリーとして表されるコードの実行パスで構成されています。 コード・パスは、例外スタック・トレースに類似したメソッド呼び出しのトレースです。

Java プロファイル

注:Java のプロファイルは、Power Linux およびPower AIX ベースのオペレーティングシステムでもサポートされています。
プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。
競合 競合プロファイルは、同期されたコードが他のスレッドのために待機している場所を示します。 待機時間の集約は、コード・パスごとに実行されます。

Node.js プロファイル

プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。
非同期呼び出し 非同期呼び出しプロファイルは、これらの非同期呼び出しが行われたコード・パスを待機する非同期呼び出しの集約ビューを示します。
メモリー割り振り率 メモリー割り振り率プロファイルは、割り振りが行われたコード・パスによって集約された、時間単位ごとのメモリーの割り振り量を示します。

Go 言語プロファイル

プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。
呼び出しのブロック ブロッキング・コール・プロファイルは、ブロッキング・コール (つまり、入出力、チャネルなどを待機しているコール) の集約ビューを表示します。 コード・パスごと。
メモリー割り振り メモリー割り振りプロファイルは、割り振りが行われたコード・パスによる現在のメモリー使用量を示します。

Python プロファイル

プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。
呼び出しのブロック ブロック呼び出しプロファイルは、コード・パスごとの呼び出し待機の集約ビューを示します。
メモリー割り振り率 メモリー割り振り率プロファイルは、割り振りが行われたコード・パスによって集約された、時間単位ごとのメモリーの割り振り量を示します。

Ruby プロファイル

プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。

.NET Core プロフィール

注:.NET Core プロファイルは、 Linux ベースのオペレーティングシステムでのみサポートされています。
プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングすることで機能します。

PHP プロファイル

プロファイル・タイプ 説明
CPU 使用率 CPU プロファイルは、コード・パスごとの CPU 使用量を表示します。 CPU プロファイラーは、プロセス実行を統計的にサンプリングします。