スレッド プロファイラー ツール
スレッド プロファイラー ツール

スレッド プロファイラー ツール

スレッド プロファイラー ツール

スレッドプロファイラーは低インパクトのプロファイリングツールで、アプリケーションのボトルネックを特定するために本番環境で利用することが可能です。指定された期間内に、周期的(100ミリ秒)に各スレッドのスタックトレースをキャプチャします。指定期間の終了時、スタックトレースは集約されツリーを形成します。ツリーのコール数は、同コンテキスト下でスタックトレースに機能が存在していた回数に対応しています。

コールツリーは全実行をキャプチャすることはできませんが、大きいサンプルであればアプリケーションのふるまいのいい例となります。アプリにおいて最も時間が使われている、「人気のある」機能に関する洞察が可能です。

この機能へのアクセス可否はサブスクリプションレベルに依存します。

サポートされているエージェント

現在この機能は以下のエージェントで利用可能です:

  • Java agentバージョン1.2.994.6以降
  • .NET agent バージョン2.12.146.o以降(.NET注意事項をご確認ください。)
  • Python agentバージョン1.7.0以降(Pyhthon注意事項をご確認ください。)
  • Ruby agentバージョン3.5.5以降(Rub注意事項をご確認ください。)

 

プロファイラーを開始する

スレッドプロファイラー機能はデフォルトで有効化されています。エージェントの設定ファイルでも、ONもしくはOFFにすることが可能です:

  • Java:『thread_profiler.enabled』
  • NET:.NETアプリではスレッドプロファイラーを無効化することはできません
  • Python:『thread_profiler.enabled』
  • Ruby:『thread_profiler.enabled』

有効化すると、New Relicユーザーインターフェースにスレッドプロファイラーが表示されます:

  1. New RelicメニューバーからAPM > (選択したアプリ) > イベント > スレッドプロファイラーを選択してください。
  2. プロファイラーを実行したいホストを選択してください。
  3. プロファイリングセッションの期間を設定してください。
  4. プロファイラーを開始するを選択してください。

これでエージェントにより、次の収集サイクル(毎分)にてスレッドプロファイラーが開始され、特定期間中のデータをキャプチャします。New Relicはサンプルが収集された時間帯に実行可能であったかなかったかに関わらず、スレッドバックトレースを記録します。眠っているもしくはIOにブロックされたスレッドもコールツリーに表示される可能性があります。


APM > (選択したアプリ) > イベント > スレッドプロファイラー:このページでは、スレッドプロファイラーの期間の設定定義や結果の表示を行います。

 

プロファイルデータを表示する

プロファイラーの実行が終了するとエージェントはプロファイルデータをレポートします。コールツリーは自動的にスレッドプロファイラーページに表示されます。コールツリーに表示されるパーセンテージは、プロファイリングセッション中に各コールパスに現れたスレッド バックトレース サンプルの率を表しています。


APM > (選択したアプリ) > イベント > スレッドプロファイラー > (選択したプロファイル):
これはスレッドプロファイルのコールツリー例です。

ページではツリー結果が色分けされます:

  • 赤:30%以上
  • 黄:10%以上30%未満
  • 黒:10%以下

 

目的 手順
スレッドプロファイル情報の表示方法を変更したい ツリー設定で利用可能なオプションを選択し、ツリーを更新するを選択します。
表示される情報量を変更したい コールツリーの上部から展開するもしくは折りたたむオプションを選択し、コールツリーの任意の行から名前もしくは矢印を選択します。

 

コールツリーの任意の行に関する概要情報を表示したい 行にカーソルを合わせます。
スレッドプロファイル結果をEメールで送信したい このプロファイルを共有するを選択します。

 

別のセッションを開始する、または違うスレッドプロファイルを表示する 全てのプロファイルに戻るを選択します。

 

エージェントに関する注意事項

どのNew Relicエージェントを利用しているかにより、スレッドプロファイリング機能に関する追加注意事項があります。

 

.NET注意事項
スレッドプロファイリングを.NETエージェントで利用する場合は下記にご留意ください。
.NETエージェント スレッドプロファイラー注意事項
管理されたスレッドのみ .NETエージェントではスレッドプロファイラーは管理されたスレッドのスタックトレースのみをキャプチャします。管理されていないスレッドのスタックトレースはキャプチャしません。管理されているスレッドにて管理されていない機能へのコールが起きた場合、スレッドプロファイラーはコールツリーに『Native:Function』コールを表示します。

 

行番号がない .NETスレッドプロファイルはコールツリーの行番号を含みません。ツリー設定の行番号を表示するチェックボックスを押しても表示されません。
64ビットv4.0 .NET CLRのバグ

 

64ビットバージョン4.0 .NET Common Language Runtime (CLR)には、管理されたスタックトレースを入手するというエージェント機能を妨害してしまうというバグがあります。アプリがこのバグを体験した場合、New Relic APMは空のスレッドプロファイルを表示します。このバグは32ビットアプリケーションには影響しません。

バグは.NET 4.5.のCLRリリースにて修正されています。64ビットのアプリケーションに修正バージョンがあるかどうかを確認するには、C:\Windows\Microsoft.NET\Framework64\v4.0.30319】 ディレクトリの『mscorlib.dll』のフルバージョンをご覧ください。バージョン4.0.30319.17379以降では修正されています。

その他 カテゴリーのみ 全てのスレッドがその他カテゴリーに入れられています。Webリクエストバックグラウンドカテゴリーがサポートされていません。

 

Python注意事項
Python agentでスレッドプロファイリングを利用する際は、下記にご留意ください。
Python agent スレッドプロファイラー注意事項
コルーチンを基としたシステム gunicornのgeventやevenletモードといったコルーチンを基としたシステムが利用されている場合、詳細のキャプチャには制限があります。新しいスレッドを作成する際、Python agentはスレッド プロファイラー バックグラウンド スレッドの代わりにgreenletを作成します。
Greenlet Greenletは他のgreenletが明らかに歩留制御されている時、つまりブロックされている時等のみ作動します。例えばスレッドサンプラーが作動しない場合、他のgreenletのスタックがブロックされた箇所のみをサンプル収集します。任意のコードを実施している際にはサンプル収集しません。もしgreenletがブロックされないか、別のgreenletに歩留されている場合は全く実施できないということになります。
Pythonコードでの時間 純粋なPythonコードに費やされたものの、リクエストをブロックしていない時間は収集されないので、いかなる情報も記録もしくはレポートされません。これはコルーチンが利用されている場合結果が誤解を招く恐れがあるためです。
Ruby注意事項
Ruby agentでスレッドプロファイリングを利用する際は、下記にご留意ください。
Ruby agent スレッドプロファイラー注意事項
Backtraces スレッドプロファイラーはRubyアプリケーション内からスレッドバックトレースをキャプチャする機能に依存します。このため、MRI 1.9.2以降が必要となります(『Thread#backtrace』 メソッドのため)。
Resque Rubyエージェントは現在バックグラウンドでResque処理がされているスレッドプロファイルをサポートしていません。Resqueに対して開始されたスレッド プロファイリング セッションは親処理からのみトレースをキャプチャし、ジョブ処理からはキャプチャしません。
JRuby Rubyは現在実験的にサポートが検討されています。JRubyの『Thread#backtrace』実装には既知の問題があり、JRuby配下で収集されたバックトレースの正確性と信頼性に影響します。

 

関連情報

追加のドキュメンテーションリソースは次のとおりです。

  • Java agent設定New Relic Java agentとセキュリティ(Java agentのスレッド プロファイラー オプションとセキュリティに関する注意事項)
  • Python agent設定(サーバー側の設定オプション)
  • X-Rayセッションスレッドプロファイルツール(X-Rayセッション限定のスレッドプロファイラー手順)

New Relic オンラインテクニカルコミュニティー での New Relic APMに関するディスカッションにぜひご参加ください ! テクニカルコミュニティーはNew Relicツールセットについて議論し、トラブルシューティングを行うための公開プラットフォームです。

PROプランのすべての機能を
14日間無料でお試し

新規無料登録いただくとPROプランのすべての機能を
14日間無料でお試しいただけます。
クレジットカードなど決済情報の登録は不要です。

各プランの詳細はこちらからご確認ください。