4

Javaでコマンドラインツールを作成しました。これをYourKitでプロファイリングしたいと思います。次のようなコマンドラインツールを起動します。

$ java -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

2秒以内に完了します。

http://www.yourkit.com/docs/80/help/agent.jspを読んだ後、次のことを試しました。

$ java -agentpath:/home/dspitzer/yjp-8.0.24/bin/linux-x86-32/libyjpagent.so -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

...そして私は得る:

[YourKit Java Profiler 8.0.24] JVMTI version 3001016d; 14.3-b01; Sun Microsystems Inc.; mixed mode, sharing; Linux; 32-bit JVM
[YourKit Java Profiler 8.0.24] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.24] *** HINT ***: To get profiling results, connect to the application from the profiler UI
...

(その後、ツールは最後まで実行されて終了します。)

(少なくともデフォルトでは)YourKitは実行中のアプリケーションにのみ接続するように設計されていると思います。

YourKitからの接続を許可するようにコマンドラインツールを変更するにはどうすればよいですか?

  1. 入力を一時停止するコマンドラインオプションを追加できます。YourKitから接続するまで、Returnキーを押して続行することはありません。
  2. YourKitに接続するまでツールをブロックするYourKitAPIをツールに追加できますか?
  3. YourKitを使用して後で(コマンドラインツールの完了後に)ロードして分析できるプロファイリング「スナップショット」を作成するYourKit APIまたはJavaコマンドラインオプションはありますか?
4

5 に答える 5

5

プロファイラーが「接続」するまで、プロファイリングされたアプリケーションを一時停止する方法はありません。あなたは単にそうする必要はありません。

代わりに、次のようにしてください。

  • 起動から必要なプロファイリングモードをオンにします。たとえば、CPU使用率をプロファイリングする必要がある場合は、対応する起動オプション「サンプリング」または「トレース」を使用して、CPUサンプリングまたはCPUトレースのいずれかを開始します。http://www.yourkit.com/docs/80/help/additional_agent_options.jspを参照してください

  • プロファイルされたアプリケーションが短期間の場合は、「onexit=snapshot」起動オプションを使用して終了時にスナップショットキャプチャを有効にします。後で分析のためにプロファイラーUIでキャプチャされたスナップショットを開きます。

于 2010-04-02T10:17:01.720 に答える
2

これを行うためのYourKitオプション(これがないというわけではありません)を知りませんが、これを行うためのJavaリモートデバッグオプションがあります。

YourKitエージェントオプションに加えて、コマンドラインに以下を追加してみてください。

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y

これにより、VMが起動するとすぐに一時停止し、デバッガーがポート8000​​に接続するのを待ちます。YourKit自体はデバッガーではありませんが、EclipseやNetbeanなどのIDEが、基本的なjdbコマンドと同様に機能します。ライン。

したがって、両方のオプションを設定してコマンドを実行し、YourKitに接続してから、デバッガーを使用してデバッグポートに接続します。これにより、VMが実行を継続し、YourKitが必要なデータを取得できるようになります。

YourKitを使用してこれをすべて行う方が良いでしょうが、私はそのような方法を知りません。

于 2010-04-01T21:32:12.320 に答える
1

アプリの起動時に起動するYourKitプラグインを備えたEclipseを介して起動できます。

于 2010-04-01T21:40:23.147 に答える
1

YourKitのonexit=snapshotオプションは、JVM出口の$ HOME/Snapshotsの下にスナップショットファイルを保存します。このスナップショットをYourKitGUIにロードして、後で分析することができます。詳細については、Webサイトのこのページを参照してください。

于 2010-04-01T23:40:33.843 に答える
0

#3の答えは「はい」です。YourKitが検査できるプロファイリング結果をアプリケーションに生成させるために使用できるAPIがあります。

APIドキュメントと、プロファイリングを制御するためのコマンドラインツールをご覧ください。

APIの使用例を次に示します(このコードは試していません)。

Controller ykController = new Controller();
ykController.enableStackTelemetry();
ykController.enableExceptionTelemetry();
ykController.startCPUProfiling(ProfilingModes.CPU_TRACING,Controller.DEFAULT_FILTERS);
ykController.startAllocationRecording(false,0,false,0);
YourMainClass.main(args);
String snapshotLocation = ykController.captureMemorySnapshot();
于 2010-04-01T21:34:47.737 に答える