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

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

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

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

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

你可以通过jcmd来做,像这样:

jcmd process_id VM.version

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

lsof -p PID | grep jdk 

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

在Linux中你可以做到

 sudo strings /proc//smaps |grep jre 

这会产生类似的东西

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

从这里你可以清楚地看到它正在使用的JDK版本。

我认为安德鲁的解决方案更好,可能就是你想要的。 不过这是另一个解决方案:

 ps -A | grep "^ " | grep -o "jdk.*.jdk" 

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

 jdk1.8.0_05.jdk