Java 获取特定程序的JVM属性

Java 获取特定程序的JVM属性,java,jvm,mxbean,Java,Jvm,Mxbean,我需要在后台运行一个特定的Java程序的JVM参数,您是如何做到这一点的 我发现,类ManagementFactory和RuntimeMXBean会给我所需的结果。现在我需要用一个特定的程序来做这个 另一个问题是,在运行以下代码时,我没有获得XMX和XMS属性 RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); List<String> jvmArgs = runtimeMXBean.getInput

我需要在后台运行一个特定的
Java程序
JVM参数
,您是如何做到这一点的

我发现,类
ManagementFactory
RuntimeMXBean
会给我所需的结果。现在我需要用一个特定的程序来做这个

另一个问题是,在运行以下代码时,我没有获得
XMX
XMS
属性

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();
RuntimeMXBean RuntimeMXBean=ManagementFactory.getRuntimeMXBean();
List jvmArgs=runtimeMXBean.getInputArguments();
我只得到
javaagent
Dfile
属性,但我还需要
XMX
XMS
,就像我说的那样。

一个明显的非答案:

我需要获取在后台运行的特定Java程序的JVM参数,您到底是如何做到这一点的

一般来说,你不能

你看,当这个进程运行时,传递给它的所有参数都被“消耗”,这完全取决于这个进程会发生什么

我的意思是:现在已经没有“通用”JVM了。到目前为止,实际上已经有了不同的实现。当然,它们都应该支持“标准化”-X选项。但是每个JVM实现都可以提供“自己的”选项和开关

长话短说:没有通用的方法从运行的JVM获取“传递的参数”


如果您真的关心这一点,我建议:编写您自己的
java
包装器脚本,只需将所有命令行参数记录到某种日志中,理想情况下使用时间戳和包装器脚本使用这些参数调用的“实际”
java
的进程ID

为什么需要-Xms、-Xmx和其他参数?命令行
jps-v
(即使有更多选项)?更详细地说,在运行程序时,似乎没有提供xmx-xms参数。当我运行您的代码时,我可以获取xmx和xms值。您可以直接从操作系统获取任何进程的整个命令行,例如,在Unix下使用
ps
。为什么您认为您需要一个特定于Java的工具?在问题的标题中,以及在中,您说的是“属性”,在所有其他地方,您说的是命令行参数。您应该在实际需要的方面保持一致。我启动了Java VisualVM,它位于Java jdk中:当运行两个不同的Java程序时,我可以看到从org开始的两个不同的进程。在VisualVM程序中使用所需的参数。没有办法输出一个进程的属性吗?如果我的程序中有PID,我能不能用它来发现它,并打印出JVM参数?@josef我想你想再次阅读我的答案。一般来说,你不能。我想我没有用我的问题清楚地表达自己,因为我找到了解决问题的办法。我创建了一个带有附加PID的Virtual Maschine类变量,然后我可以通过打印出来找到所需的参数。