visualvm 在 Ubuntu 15.10 和 Oracle JDK 上因 "No jdkhome found" 而失败

visualvm fails with "No jdkhome found" on Ubuntu 15.10 with Oracle JDK

我从 webupd8team/java PPA 安装了 Oracle JDK,然后安装了 visualvm 包。启动 visualvm 时,我收到以下错误消息:

[beni:~]$ visualvm
No jdkhome found

我的 $JAVA_HOME 正确设置为 /usr/lib/jvm/java-7-oracle

此外,当使用 jdkhome 属性 集启动 visualvm 时,我得到同样的错误:

[beni:~]$ visualvm --jdkhome $JAVA_HOME
No jdkhome found

visualvm 检查以下三个目录是否有 JDK:

  • /usr/lib/jvm/java-7-openjdk-$ARCH
  • /usr/lib/jvm/java-8-openjdk-$ARCH
  • /usr/lib/jvm/default-java

来自 /usr/bin/visualvm 启动脚本:

visualvm_jdkhome=
for j in /usr/lib/jvm/java-7-openjdk-$ARCH /usr/lib/jvm/java-8-openjdk-$ARCH /usr/lib/jvm/default-java; do
    if [ -x $j/bin/javac ]; then
       visualvm_jdkhome=$j
       break
    fi
done

所以让 /usr/lib/jvm/default-java 成为 $JAVA_HOME 的符号链接,然后 visualvm 会找到正确的 JDK.

cd /usr/lib/jvm
sudo ln -Tsf java-7-oracle default-java

在我的例子中,即使是 default-java 的符号链接也没有解决问题。 为了修复,我做了:

编辑 jvisualvm 并将任何 "trash" 添加到 jdkhome 变量

  • $ sudo vi /usr/bin/jvisualvm

jdkhome=/tmp

然后启动程序传递参数:

  • /usr/bin/jvisualvm --jdkhome /usr/lib/jvm/myJava7

注意:今天(2016 年),我的版本仅适用于 java7

更新:现在,在 2017 年,使用版本 1.3.8,它与 Java 8 一起工作。但是我需要添加 visualvm_jdkhome=/tmp,在/usr/bin/visualvm