如何以编程方式获取特定JVM实例的系统属性?

use*_*528 10 java jvm properties

我希望获得为第三方java进程/ JVM设置的系统属性.我需要以编程方式执行此操作.例如,获取"java.class.path"属性.我怎样才能做到这一点?

我知道我们可以获取使用System.getProperty()编写的java程序的属性.但我需要获取第三方JVM的系统属性.我怎样才能获得相同的?

Rog*_*sjö 17

如果第三方JVM只是意味着另一个JVM,那么你应该尝试使用jinfo.这不适用于所有JVM实现,但很可能有它或类似的东西.jinfo将进程id作为参数(或远程系统,请参阅man jinfo).要查找进程ID,请使用jpsjps -v.

jinfo 74949
Attaching to process ID 74949, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.4-b02-402
Java System Properties:

java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries
java.vm.version = 20.4-b02-402
awt.nativeDoubleBuffering = true
...


Nic*_*tto 5

从 Java 7 开始,您可以使用作为jcmd JDK 一部分的命令以便它在所有操作系统上以相同的方式工作。

它可以与 pid 或主类一起使用。

使用目标JVM的pid

然后语法是 jcmd ${pid} VM.system_properties

例子:

> jcmd 2125 VM.system_properties
2125:
#Tue Jul 24 18:05:39 CEST 2018
sun.desktop=windows
...
Run Code Online (Sandbox Code Playgroud)

与班级名称

然后语法是 jcmd ${class-name} VM.system_properties

例子:

> jcmd com.mycompany.MyProgram VM.system_properties
2125:
#Tue Jul 24 18:05:39 CEST 2018
sun.desktop=windows
...
Run Code Online (Sandbox Code Playgroud)

有关如何使用的jcmd更多详细信息。

另请参见jcmd实用程序

  • 我不知道这个工具。好的! (2认同)