10

我可以使用 jps 列出正在运行的 java 进程并使用 jstack -l process_id 来获取正在运行的 java 进程的堆栈信息。我想知道这个过程在哪个 java 版本上运行。有没有办法做到这一点?我不必使用 jstack 工具。谢谢。

jstack -l 23819 2014-11-12 12:36:11 全线程转储 OpenJDK 64 位服务器 VM(23.25-b01 混合模式):

“附加侦听器”守护进程 prio=10 tid=0x000000000272f800 nid=0x614b 等待条件 [0x0000000000000000] java.lang.Thread.State: RUNNABLE

锁定的可拥有同步器: - 无

4

4 回答 4

20

您可以通过 jcmd 来完成,如下所示:

jcmd process_id VM.version
于 2014-11-12T21:08:58.650 回答
5

在Linux中你可以做

sudo strings /proc/<java_pid>/smaps |grep jre

这将产生类似于

7f8ff82ac000-7f8ff82ad000 r-xp 00000000 fd:00 252363860 /usr/java/jdk1.8.0_141/jre/lib/amd64/libjaas_unix.so

从这里你可以清楚地看到它使用的是什么 JDK 版本。

于 2017-09-27T22:36:56.630 回答
3

使用标准命令的简单解决方案如下所示:

lsof -p PID | grep jdk

它为您提供进程加载的文件列表。

于 2015-10-13T16:02:22.233 回答
0

我认为安德鲁的解决方案更好,可能是您正在寻找的。不过这里有另一个解决方案:

ps -A | grep "^ <the pid>" | grep -o "jdk.*.jdk"

我正在运行的程序的输出:

jdk1.8.0_05.jdk
于 2014-11-12T21:14:02.087 回答