java - 为什么 VisualVM Profiler 不能分析我的 Scala 控制台应用程序?

标签 java scala jvm profiling visualvm

我认为这个问题与 this 密切相关一个,但它已关闭,解决方案对我来说似乎不太清楚。

我正在尝试使用 VisualVM 来分析我的控制台 Scala 应用程序。为此,我启动 VisualVM,启动我的 Scala 应用程序,在 VisualVM 中打开它的节点,转到“Profiler”选项卡并单击“CPU”。该按钮会变灰一段时间(虽然状态永远不会从“分析不活动”更改为任何内容),然后恢复 Activity 但不会显示任何分析数据。

应用程序执行一些文件读取、数据处理(大约需要一分钟)、stdout 数据输出并退出。我还尝试将 Thread.sleep(60000) 添加到程序的开头和结尾,以确保 VisualVM 有足够的时间捕获它并完成工作,但没有任何改变。

与我链接到的相关问题不同,我不从 Eclipse 或其他任何东西启动我的应用程序 - 我使用以下命令行启动它:

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

所有库(包括scala-library.jar)都放在lib/中。该应用程序按预期运行。

更新:

  • 我已经尝试过 YourKit Java Profiler 11.0.2,但它因 AttachNotSupportedException 而失败。
  • 我已通过 attaching the agent manually 管理 YourKit .
  • 似乎值得强调的是,我既没有从 IDE(或构建工具)运行应用程序,也没有修改任何 JVM 选项,除了类路径。据我了解,这个问题似乎取决于 JVM 版本和用户/权限问题。 目标是找出问题的实际机制以及配置所有事物以使其正常工作的方法

所用软件版本:

  • YourKit Java 探查器 11.0.2
  • VisualVM 1.3.4
  • SBT 0.12.3(构建但不运行(实际上我都试过了))
  • Scala 2.9.2
  • 甲骨文 Java 1.7.0_04-b20
  • XUbuntu Linux 12.04 32 位 i386
  • Linux 内核 3.2.0-24-generic-pae

最佳答案

两天前我使用 VisualVM 分析了一个 Scala 应用程序,所以我相信它应该可以工作。以下是我的建议:

  • 将 YourKit 排除在外,并在没有它的情况下开始运行
  • 将 scala 排除在等式之外,尝试分析执行 while (true) { Thread.sleep(10000); 的 Java hello world }
  • 让它工作,然后放回 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

关于java - 为什么 VisualVM Profiler 不能分析我的 Scala 控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591463/

相关文章:

java - 将不透明度从 0.0 0.1 .. 更改为 1.0 以创建动画效果

java - 将数据结构从 java 传递到 perl(反之亦然)

scala - 如何让 HBase 与 sbt 的依赖管理很好地配合?

scala - 如何比较scala中的两个数据框

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本

java - 浏览器上通常安装哪些 Java 版本,假设 1.4 是否安全?

java - 如何解决这个: "Error occurred during initialization of VM; Could not reserve enough space for object heap"

java - 是否可以在 Java 中模拟 Javascript 样式的原型(prototype)?

java - 使用 JTextFields 或 JTextAreas 创建矩阵

scala - 什么是 Scala 中的盒装错误?