笔记:看来 jvmtop 在 Java 11 中只是出现了故障。如果安装和执行说明清楚的话,我还会接受 Ubuntu 20.04(仅限终端)和 Java 11 的替代 Java 进程分析选项。
jvmtop 需要JAVA_HOME
环境变量指向有效的 JDE。
我尝试JAVA_HOME
在~/.profile
最后一行进行设置:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin
所以它是永久的。
但是,执行后bash jvmtop.sh --profile <PID>
我得到了这个:/usr/lib/jvm/java-11-openjdk-amd64/bin seems to be no JDK!
更新1:根据 answer 中的说明,我使环境路径永久化。但错误仍然出现:
network@ns3009333:~/jvmtop$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/bin
network@ns3009333:~/jvmtop$ bash jvmtop.sh --profile 7435
/usr/lib/jvm/java-11-openjdk-amd64/bin seems to be no JDK!
更新2:我尝试在不同情况下将以下 3 个命令附加到 ~/.profile:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
消息仍然是“似乎没有 JDK!”(我确保我重新登录了)。
更新3:还尝试 按照我找到的教程进行设置。结果同样不好JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
。
nano jvmtop.sh
更新4:我认为我的 JDE 可能安装不正确,因此我重新安装了 Java JDK 和 JDE。我目前已完全安装 Java 11 并确认可以正常工作(没有其他 Java 版本,只有 11)。我还验证了/usr/lib/jvm/java-11-openjdk-amd64
路径指向的文件夹确实存在且包含内容。
我也尝试使用两者执行 jvmtop.sh ./
,bash
错误消息相同。
当前设置是:
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
添加到
nano jvmtop.sh
第 10 行,然后执行指向有效进程 ID 的 jvmtop.sh。
更新5:我最终决定在 jvmtop 上开一个 github 票,果然,在我这样做之后,我发现有人已经针对同样的问题这样做了: https://github.com/patric-r/jvmtop/issues/119
答案1
如何在 Ubuntu 上成功运行 jvmtop 来分析 Java 进程
首先下载并解压jvmtop,链接:https://github.com/patric-r/jvmtop
jvmtop 不能保证与 Java 8 以上的版本配合良好。为了确保您使用的是 Java 8:
apt install openjdk-8-jdk
您可以查看所有已安装的 Java 版本,并使用以下命令切换到其中一个版本:
update-alternatives --config java
确保您使用的是 Java 8。
转到下载并解压 jvmtop 的目录。
JAVA_HOME 环境变量必须指向有效的 JDK,jvmtop 才能工作。简单的方法,只需:
nano jvmtop.sh
添加至第 10 行:
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
或与 java 8 等效的路径。
使用命令检查要分析的进程 ID
ps -aux
找到进程 ID 后,运行:
bash jvmtop.sh --profile <PID>
您可以跳过 pid,它只会分析所有 java 进程。