Linux のターミナルから実行できる Java 用の gprof のようなプロファイラーはありますか? 私が見つけたすべてのツールは GUI プログラムであり、端末から実行する必要があります。
5 に答える
JVMには、HPROFと呼ばれる組み込みのプロファイラーがあります。次のようにコマンドラインで有効にできます。
java -agentlib:hprof=file=hprof.txt,cpu=samples MyClass
これにより、プログラムの終了時にプロファイル情報がテキストファイルにダンプされます。CPU使用率のプロファイリングに加えて、ヒープ使用率を追跡することもできます。
オープンソース ツールjvmtopにはターミナル プロファイラーが含まれており、一見の価値があるかもしれません。
JvmTop 0.7.0 alpha - 15:16:34, amd64, 8 cpus, Linux 2.6.32-27, load avg 0.41
http://code.google.com/p/jvmtop
Profiling PID 24015: org.apache.catalina.startup.Bootstrap
36.16% ( 57.57s) hudson.model.AbstractBuild.calcChangeSet()
30.36% ( 48.33s) hudson.scm.SubversionChangeLogParser.parse()
7.14% ( 11.37s) org.kohsuke.stapler.jelly.JellyClassTearOff.parseScript()
6.25% ( 9.95s) net.sf.json.JSONObject.write()
3.13% ( 4.98s) ....kohsuke.stapler.jelly.CustomTagLibrary.loadJellyScri()
JXInsight/OpenCore にはターム/シェル レポート プラグイン (トップ、キュー、スタックなど) があり、定期的に測定データとメトリック データを出力します。また、Open API を使用してこの情報にアクセスすることもできます。これにより、JVM 内でリアルタイムにモデルを検査したり、スナップショット ファイル ハンドルを使用してオフラインでモデルを検査したりできます。両方ともプラグイン API を介してサポートされており、トップ、キュー、... がどのように機能するかが示されています。
http://www.jinspired.com/products/opencore (商用)
GUI を使用できない技術的な理由はありますか? ワークフローの習慣による単なる好みですか? そうでない場合は、無料の JXInsight/Opus Java Edition をいつでも試すことができます。これは、Java および JRuby アプリケーション内のホットスポットを迅速に特定するための、非常に効率的でスケーラブルなコード レベルのレイテンシ パフォーマンス測定ソリューションです。
http://www.jinspired.com/products/opus
注: 私は両方の製品のプロダクト アーキテクトです。
そのためにjconsoleを使用します。http://docs.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html
プロファイリングと監視に必要な場合。Jvisualvmを使用できます。
アプリサイトから:
説明 Java VisualVM は、特定の Java 仮想マシン (JVM*) で実行されている Java テクノロジ ベースのアプリケーション (Java アプリケーション) に関する詳細情報を提供する直感的なグラフィカル ユーザー インターフェイスです。Java VisualVM という名前は、Java VisualVM が JVM ソフトウェアに関する情報を視覚的に提供するという事実に由来しています。
Java VisualVM は、いくつかの監視、トラブルシューティング、およびプロファイリング ユーティリティを 1 つのツールに結合します。たとえば、スタンドアロン ツールの jmap、jinfo、jstat、および jstack によって提供される機能のほとんどは、Java VisualVM に統合されています。JConsole ツールによって提供される機能の一部など、その他の機能は、オプションのプラグインとして追加できます。
編集: ターミナルアプローチが必要な場合は、このリンクTriggering a Javadump を参照してください。javaダンプの作成について説明します。