9

私はJavaを使用してアルゴリズムの実装を書いています。OS X 10.7までは、Shark Profilerを使用して実装のプロファイルを作成していましたが、これはかなりうまく機能していました。ただし、新しいInstrumentsはプロシージャ名を検出しなくなりました。sharkのVM引数(つまり、-agentlib:Shark)を使用してJavaアプリケーションを実行しようとしましたが、10.7には不明であり、インストゥルメント用のそのようなagentlibは見つかりませんでした。

Insturmentsのシンボル名(16進数)にプロシージャ名を付ける方法について何かアイデアはありますか?違いがあれば、私はEclipseIndigoを使用しています。

ありがとう!

編集:これまでのところ、OS XMountainLionでは何も変わっていません。

編集#2:アップルのバグレポーターを介した(?)開発者からの更新:

dtraceは過去のある時点でJavaスタックをサポートしていましたが、サポートが維持されているかどうかは正直に言えませんでした。これは、測定しようとしているものに対する実行可能な回避策である可能性があります。それ以外の場合、現時点ではパフォーマンスツールの優先事項ではありません。/usr/bin/cpu_profiler.dにあるDスクリプトから始めて、jstackも収集するように修正することをお勧めします。

編集#3:さて、もう少し議論した後、開発者自身がそのスクリプトがどこから来たのか知らなかったことがわかりました。明らかに、InstrumentsのタイムプロファイラーはDTraceを使用しないため、残っている唯一のオプションは、独自のDTraceスクリプトまたはInstrumentを作成することです。

その通りです。お詫び申し上げます。そのスクリプトがどこから来たのかわかりません。注意深く見ると、jstackアクションが含まれていないため、とにかく必要なものではありません。私が提供できる唯一のJavaプロファイリングオプションはDTraceのようです。DTraceには、プロファイルプロバイダーと、Javaスタックを収集するjstackアクションがあります。「集計」を使用して、最も重いスタックトレースを特定できます。これらはすべて、コマンドラインから機能します。DTraceのドキュメントは、ほとんどがSunによって管理されており、ほとんどがプロファイルプロバイダーを対象としているため、DTraceチュートリアルを紹介します。

人々がオンラインで言っていることにもかかわらず、Instrumentsはすべて、特に時間プロファイリングにDTraceを使用しているわけではないので、InstrumentsUIで簡単な修正を提供することはできません。

4

3 に答える 3

5

Instruments は、Sun が開発した dtrace と呼ばれる素敵なソフトウェアに依存しています。dtrace には、Java シンボルを使用してスタック トレースを出力することになっている「jstack()」という関数があり、他の言語 (python、node.js など) で同様のことを行うことになっている「ustack()」もあります。 )。残念ながら、OS X の dtrace のバージョンはこれらのメソッドをサポートしていないため、Instruments はその機能を提供しません。

残念ながら、Apple が修正するまで、これらのツールからその情報を取得することはできません。:(

詳細については、このスレッドに従ってください: http://www.mail-archive.com/dtrace-discuss@opensolaris.org/msg04863.html

ヘルパー スタック トレーサーがサポートされていないことについて、Apple にバグを報告しました。この機能が必要な場合は、バグも報告する必要があります: https://bugreport.apple.com

于 2013-03-28T21:09:01.943 に答える
0

私の頭に浮かぶことの1つは、デバッグ情報を含めるためのコンパイラーの-gオプションです。javaceclise(少なくともheliosでは)では、「Javaコンパイラ」、「クラスファイル生成」でデータをデバッグするためのさまざまなオプションを設定できます。たぶん、それらの設定のいくつかが壊れてしまいました。

ただし、これでは、クラスファイルに常に含まれているメソッド名の問題は解決されません。それでも、Java VMのさまざまなフレーバーは、さまざまな方法でランタイム最適化を実行します。たとえば、ドキュメントのスタックトレースの信頼性に関する注記を参照してください。

したがって、別の(バージョンの)VMに切り替えると、プロファイラーが正しいことを実行する能力に影響を与える可能性があります。-ちなみに、その過程でJavaバージョン(1.6から1.7など)を暗黙的に「アップグレード」しませんでしたか?

于 2012-12-17T20:36:46.260 に答える
0

Java アプリケーションのプロファイルを作成する場合は、Oracle の Visualvm (Java.net 経由) を使用することをお勧めします。このツールは、リモート JVM の場合でも、メモリと CPU をメソッドまでプロファイリングできます。OSX では、デフォルトの JDK の一部ではないことは明らかですが、ここから入手できます: http://visualvm.java.net/download.html サメの代わりになる可能性があります。

于 2012-12-18T21:09:27.573 に答える