2016-01-04 68 views
1

我創建一個web項目中使用的彈簧引導和在遠程服務器上部署它,它的默認JDK是如何檢查正在運行的Java程序的Java版本使用

echo $JAVA_HOME 
/usr/local/jdk1.7.0_72 

,因爲我在我的項目用java 8,所以我開始項目之前,我明確exec的指令低於

export JAVA_HOME="/usr/local/jdk1.8.0_65" 

然後開始我的項目

./myapp.jar 

BU T當我exec的指令低於

java -version 
java version "1.7.0_72" 
Java(TM) SE Runtime Environment (build 1.7.0_72-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode) 

我有點困惑,我不知道哪個版本的JDK實際使用我的項目? 也就是說有一個java程序

jps -l 
17429 /var/myapp.jar 

我怎麼知道哪個版本的Java使用它?

感謝@ frant.hartm

# ps aux | grep 17429 
root  17429 0.4 6.7 5995260 1104984 pts/13 Sl 19:16 0:29 /usr/local/jdk1.8.0_65/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dserver.port=8081 -jar /var/myapp.jar 

# jcmd 17429 VM.version 
17429: 
Java HotSpot(TM) 64-Bit Server VM version 25.65-b01 
JDK 8.0_65 

回答

1

使用jcmd:

jcmd process_id VM.version 

$ jcmd 9619 VM.version 
9619: 
Java HotSpot(TM) 64-Bit Server VM version 24.80-b11 
JDK 7.0_80 

或者,你可以使用ps來找出其中的Java二進制使用:

ps aux | grep 9619 
user 9619 0.0 0.5 4031224 82480 ?  Sl 12:31 0:01 /usr/lib/jvm/java-7-oracle/bin/java -cp /usr/lib/jvm 
+0

非常感謝! – zhuguowei

0

如果執行which java,它會給你的Java二進制文件默認情況下使用您的操作系統。

如果你想使用Java 8運行應用程序並保留默認位置不變,只需運行:

/usr/local/jdk1.8.0_65/bin/java ./myapp.jar 
+0

感謝,但我想知道,如果eixst一些JVM工具如'jstack jmap'可以幫助您瞭解Java進程的java版本 – zhuguowei

+0

在大多數具有某種「替代」系統(如Ubuntu)的Linux發行版上,這將指向符號鏈接(例如/ usr/bin/java - >/etc/alternatives/java,/ etc/alternatives/java - >/usr/lib/jvm/java-8 -oracle/jre/bin/java) –

相關問題