我可以使用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
锁定可拥有的同步器: - 没有
答案 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