スレッドプロファイラは、アプリケーションのボトルネックを特定するために実運用環境で使用できる、影響の少ないプロファイリングツールです。スレッドプロファイラは、各スレッドのスタックトレースを定期的(100ms)にキャプチャし、指定された期間で動作します。指定された期間が終了すると、スタックトレースが集約され、ツリーが構築されます。ツリー内のコールカウントは、同じコンテキストでスタックトレース内にその関数が存在した回数に対応します。
コールツリーは実行全体を捉えることはできませんが、十分に大きなサンプルはアプリケーションの動作をよく表しています。これにより、ほとんどの時間が費やされているアプリの"ホット" の機能についての洞察が得られます。この範囲では、0.05%未満しかサンプリングされていないエントリは省略されます。
対応エージェント
この機能は、特定のエージェントやバージョンでのみ利用可能です。
Javaです。Agentバージョン1.2.004.6以上
.NETに対応しています。
- フレームワーク。Agentバージョン2.12.146.0以上
- .NET Core 2.0を使用しています。Agentバージョン8.3.360.0以降(Windowsのみ)
- Linux: .NET Core 3.0以上、エージェントバージョン8.23以上
Pythonです。Agentバージョン1.7.0以上
Rubyを使用しています。Agentバージョン3.5.5以上
プロファイラーの起動
スレッドプロファイラ機能は、デフォルトで有効になっています。また、エージェントの設定ファイルでオン/オフを切り替えることができる場合もあります。
- Javaです。
thread_profiler.enabled
- NET:.NETアプリでスレッドプロファイラーを無効にすることはできません。
- パイソン:
thread_profiler.enabled
- ルビー:
thread_profiler.enabled
この機能を有効にすると、ユーザーインターフェースからスレッドプロファイラを表示することができます。
- one.newrelic.com > APM & services > (アプリを選択) > Events > Thread profilerに移動します。
- プロファイラーを実行するホストを選択します。
- プロファイリングセッションの継続時間を設定します。
- Select Start profiler.
これにより、エージェントは次のハーベストサイクル(1分ごと)にスレッドプロファイラを起動し、指定された期間のデータを取得するようになります。サンプル取得時に実行可能な状態であるかどうかに関わらず、スレッドのバックトレースを記録します。スリープしているスレッドやIOでブロックされているスレッドがコールツリーに表示されることがあります。
one.newrelic.com > APM & サービス > (アプリを選択) > イベント > スレッド プロファイラー: このページを使用して、スレッド プロファイラーの期間の設定を定義し、結果を表示します。
プロフィールデータを見る
プロファイラの実行が終了すると、エージェントがプロファイルデータを報告します。コールツリーは、 Thread profiler ページに自動的に表示されます。コールツリーのパーセンテージは、プロファイリングセッション中に各コールパスが出現したスレッドバックトレースサンプルのパーセンテージを表しています。データ収集はPROFILE COLLECTEDの時間に開始されました。
このページでは、ツリーの結果を色分けしています。
- 赤。30%以上の割合
- 黄色。割合が10%を超えるもの
- ブラック割合が10%未満
あなたがしたい場合は... | これを行う... |
---|---|
スレッドのプロフィール情報の表示方法の変更 | Tree settings で利用可能なオプションを選択し、 Refresh tree を選択します。 |
情報表示量の変更 | コールツリーの上にある「 Expand 」または「 Collapse 」オプションを選択するか、コールツリーの任意の行で名前または矢印を選択します。 |
コールツリー内の任意の行のサマリー情報を表示する | ラインにマウスオーバーします。 |
スレッドプロファイルの結果を他の人にメールで送信 | Select Share this profile. |
別のセッションを開始したり、別のスレッドプロファイルを表示する | 選択 すべてのプロファイルに戻る. |
エージェントの考慮事項
どのエージェントを使用するかによって、スレッドプロファイリング機能には追加の考慮事項があります。