2014-10-20 66 views
17

有沒有更好的方法從命令行打印系統屬性?由於我們可以設置屬性,例如從命令行讀取Java系統屬性

java -D<name>=<value> //set a system property 

沒有寫一個類來做到這一點?如果不可能,爲什麼從命令行不可能/不可行?

+0

系統屬性在啓動JVM時設置。在此之前,沒有什麼可讀的。 – Seelenvirtuose 2014-10-20 06:52:04

+0

您是否想要區分默認的系統屬性和通過命令行設置/覆蓋的屬性? – Bohemian 2014-10-20 06:53:59

+0

你在問如何讀取系統屬性? – 2014-10-20 07:01:04

回答

34

可以使用-XshowSettings國旗在熱點JVM版本1.7及以上(不1.6支持):

java -XshowSettings:properties -version 

的OpenJDK已經有支持此標誌自2010年底起。

見於http://marxsoftware.blogspot.de/2016/02/hotspot-jvm-XshowSettings.html

編輯二零一六年十二月十四日

Oracle的JVM附帶的工具jcmd它可以讓你看到目前在運行的JVM的標誌。請參閱:

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html

對於這種使用情況,您可以使用:

jcmd <pid> VM.system_properties 

但也有很多其他有用的命令。例如:

jcmd <pid> VM.flags 
jcmd <pid> VM.command_line 
jcmd <pid> GC.run 
+0

看起來'VM.system_properties'只顯示「衆所周知」的屬性。有沒有辦法查看用戶創建的屬性? – 2018-01-08 21:54:59

+1

我不知道。我建議你發佈一個問題並將其鏈接到這個問題。 – AdrianRM 2018-01-12 15:06:54

13

您可以使用jps jdk附帶的工具。 它可以打印出傳遞給java進程的系統屬性。

例如:在我的系統蝕正在運行,並且

$ jps -v 

輸出

6632 -Dosgi.requiredJavaVersion=1.6 -Xms1024m -Xmx2048m -XX:MaxPermSize=512m 

jps位於JDK_HOME/bin

EDIT

若y ou希望所有屬性都使用位於JDK_HOME/bin中的jinfo工具。要使用它,你必須知道你想從中獲取信息的java進程的進程ID。例如。

$ jinfo 6632 

該工具還打印出java.ext.dirs

+0

如何獲得'java.ext.dirs'的值? – sakhunzai 2014-10-20 07:27:28