获取正在运行的java进程的java版本

时间:2014-11-12 20:44:00

标签: java jstack

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

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

"附加听众" daemon prio = 10 tid = 0x000000000272f800 nid = 0x614b等待条件[0x0000000000000000]    java.lang.Thread.State:RUNNABLE

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

4 个答案:

答案 0 :(得分:16)

你可以通过jcmd这样做:

jcmd process_id VM.version

答案 1 :(得分:1)

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

lsof -p PID | grep jdk

它为您提供了该过程加载文件的列表。

答案 2 :(得分:1)

在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版本。

答案 3 :(得分:0)

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

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

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

jdk1.8.0_05.jdk