9

質問はこれに強く関連していると思いますが、それは閉じられており、解決策は私には明確ではないようです。

VisualVMを使用して、私のコンソールScalaアプリケーションのプロファイルを作成しようとしています。これを行うには、VisualVMを起動し、Scalaアプリケーションを起動し、VisualVMでそのノードを開き、[プロファイラー]タブに移動して、[CPU]をクリックします。ボタンはしばらくの間灰色になり(ステータスが「プロファイリング非アクティブ」から何にも変更されない間)、その後アクティブに戻りますが、プロファイリングデータは表示されません。

アプリケーションは、ファイルの読み取り、データ処理(約1分かかります)、stdoutデータの出力を行い、終了します。また、プログラムの最初と最後に追加Thread.sleep(60000)して、VisualVMがプログラムをキャプチャしてジョブを実行するのに十分な時間を確保しようとしましたが、何も変わりませんでした。

私がリンクした関連する質問とは異なり、Eclipseなどからアプリを起動しません-次のコマンドラインを使用してアプリを起動します:

java -classpath myapp.jar:lib/* MyApp.Main

すべてのライブラリ(を含むscala-library.jar)はに配置されlib/ます。アプリは期待どおりに動作します。

更新:

  • YourKit Java Profiler 11.0.2を試しましたが、で失敗し AttachNotSupportedExceptionます。
  • エージェントを手動で接続してYourKitで管理しました。
  • IDE(またはビルドツール)からアプリケーションを実行したり、クラスパス以外のJVMオプションを変更したりしていないことを強調する価値があるようです。私が理解している限り、この問題はJVMのバージョンとユーザー/権限の問題に依存しているようです。目的は、問題の実際のメカニズムと、すべてのものを機能させるように構成する方法を理解することです。

使用したソフトウェアのバージョン:

  • YourKit Java Profiler 11.0.2
  • VisualVM 1.3.4
  • SBT 0.12.3(ビルドするが実行しない(実際に両方を試した))
  • Scala 2.9.2
  • Oracle Java 1.7.0_04-b20
  • XUbuntu Linux12.0432ビットi386
  • Linuxカーネル3.2.0-24-generic-pae
4

1 に答える 1

7

2 日前に VisualVM を使用して Scala アプリケーションのプロファイリングを行ったので、うまくいくと思います。ここに私の提案があります:

  • 方程式から YourKit を取り出し、スターターとしてそれなしで物事を実行します
  • 方程式からscalaを取り出して、Java hello world のプロファイリングを試してみてください。while (true) { Thread.sleep(10000); }
  • それを機能させてから、Scala を元に戻し、次に YourKit を元に戻します。

編集:あなたの入力に基づいて、リモートJMX接続を明示的に設定することをお勧めします。次のオプションを使用して Java を起動できます。

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=20000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

次に、VisualVM で、JMX 接続を に追加しlocalhost:20000ます。

于 2012-05-15T03:20:50.343 に答える