如果我在 cygwin 控制台中启动 java 进程,然后启动 visualVm,则后者看不到前者。
如果我在 Dos 控制台中启动相同的进程,visualvm 会很好。我在jdk1.6.0_25。这发生在 win7 32b 和带有 64b jvm 的 win7 64b 中。
任何人都可以想到一个解释/解决方法?
我通过在 Cygwin 中运行 VisualVM 解决了这个问题。如果您不想使用远程 JMX 连接进行分析,则可以使用 Cygwin 运行 VisualVM 和 Java 程序:
打开 Cygwin 控制台窗口,导航到 visual_vm.exe 并从 Cygwin 环境中运行该文件。
我有同样的问题。vm 没有自动显示,但我能够通过“添加 JMX 连接”使用主机名和 jmx.remote.port 进行连接...
在 VisualVM 上,转到文件 -> 添加 JMX 连接
localhost:3333
在启动时添加 vm 参数,例如:
-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
VisualVM 可以自动检测在同一用户下运行的本地应用程序。所以一种解释可能是 cygwin 进程在不同的用户下运行。确保 VisualVM 和受监控的应用程序都在 JDK 6 更新 25 下运行。JDK 6 更新 25 修复了以下JDK 错误 #6938627,这可能会影响您的情况。
@seanhodges 答案的相反方法是启动应用程序以使用修改后的环境进行调试,将其指向您的 Windows 用户临时目录
例如,如果您通常这样做:
./gradlew run
并说您在 Windows 上的 TEMP 目录(根据您的用户环境变量)是:
T:\Temp
您可以改为执行以下操作之一:
TMP=T:\\Temp ./gradlew run
TMP=/cygdrive/t/Temp ./gradlew run
(他们似乎都工作)