【问题标题】:Why won't the VisualVM Profiler profile my Scala console application?为什么 VisualVM Profiler 不能分析我的 Scala 控制台应用程序?
【发布时间】:2012-05-22 10:01:09
【问题描述】:

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

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

应用程序执行一些文件读取、数据处理(大约需要一分钟)、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 Profiler 11.0.2
  • VisualVM 1.3.4
  • SBT 0.12.3(构建但不运行(实际上我都尝试过))
  • Scala 2.9.2
  • Oracle Java 1.7.0_04-b20
  • XUbuntu Linux 12.04 32 位 i386
  • Linux 内核 3.2.0-24-generic-pae

【问题讨论】:

  • Scala 创建了一些非常时髦的 JVM 指令。 JVisualVM 可能正在寻找由 JDK 的 javac 生成的模式,并且被 scalac 生成的模式弄糊涂了。

标签: java scala jvm profiling visualvm


【解决方案1】:

两天前我使用 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 中,添加一个到 localhost:20000 的 JMX 连接。

【讨论】:

  • 对于这样一个简单的(我也尝试过更长的睡眠时间)Java 应用程序,“Profiler”选项卡甚至没有出现在 VisualVM 中(“采样器”或“线程”选项卡也没有):只有“概述” " 和 "监视器" 可用。
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2015-01-29
  • 2013-12-29
  • 2017-06-30
  • 2010-10-29
相关资源
最近更新 更多