从命令行读取Java系统属性

时间:2014-10-20 06:48:48

标签: java environment-variables

有没有更好的方法从命令行打印系统属性?我们可以设置属性,例如

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

没有写一个课来做那个?

如果不可能,为什么从命令行执行此操作不可行/可行/不好?

3 个答案:

答案 0 :(得分:62)

您可以在Hotspot JVM 1.7及更高版本中使用-XshowSettings标志(1.6不支持):

java -XshowSettings:properties -version

自2010年底以来,OpenJDK一直支持这一旗帜。

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

编辑2016年12月14日

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 

答案 1 :(得分:16)

您可以使用jps jdk附带的工具。 它可以打印出传递给java进程的系统属性。

例如:在我的系统上,eclipse正在运行并且

$ jps -v

输出

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

jps位于JDK_HOME/bin

修改

如果您想要所有属性,请使用同样位于JDK_HOME/bin的{​​{3}}工具。要使用它,您必须知道要从中获取信息的java进程的进程ID。 E.g。

$ jinfo 6632

此工具还会打印出java.ext.dirs

答案 2 :(得分:0)

如果您需要默认值,即您的JVM最初将被设置(除非被覆盖),请使用:

java -XshowSettings:properties -version  

如果您尚未运行Java应用程序,因此没有pid可以传递给其他命令之一,这将很有帮助。

如果要查找已运行的JVM的属性,该JVM具有通过默认设置或通过命令显式设置的属性,则将jpsjcmd或{{ 1}}命令,如上面的答案中所述。