【问题标题】:Get JVM Properties of a specific Program获取特定程序的 JVM 属性
【发布时间】:2019-09-04 07:39:50
【问题描述】:

我需要让特定Java ProgramJVM Arguments 在后台运行,您具体是怎么做的?

我发现,ManagementFactoryRuntimeMXBean 课程会给我所需的结果。现在我需要用一个特定的程序来做到这一点。

另一个问题是我在运行以下代码时没有得到XMXXMS 属性。

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();

我只得到javaagentDfile 属性,但我还需要XMXXMS,就像我说的那样。

【问题讨论】:

  • 为什么需要-Xms、-Xmx等参数?
  • 命令行jps -v(即使有更多选项)?更多Tools Reference
  • 运行程序时似乎没有提供 xx xms 参数。当我运行您的代码时,我可以获得 xx 和 xms 值
  • 您可以直接从操作系统中获取任何进程的整个命令行,例如在 Unix 下使用ps。为什么你认为你需要一个 Java 特定的工具?
  • 在问题的标题以及this comment 中,您说的是“属性”,在所有其他地方,您说的是命令行参数。您应该尽量与您真正想要的保持一致。

标签: java jvm mxbean


【解决方案1】:

一个明显的不回答:

我需要获取在后台运行的特定 Java 程序的 JVM Arguments,您具体是怎么做的?

一般来说,你不能。

您会看到,一旦该进程运行,传递给它的所有参数都被“消耗”了,这完全取决于该进程会发生什么。

我的意思是:首先不再有“通用”JVM 这样的东西。现在实际上有不同的实现。当然,它们都应该支持“标准化”-X 选项。但是每个和任何 JVM 实现都可以提供“它自己的”选项和开关。

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

如果你真的关心这个,我建议:编写你自己的 java 包装脚本,简单地将所有命令行参数记录到某种日志中,最好带有时间戳和进程 ID您的包装脚本使用这些参数调用的“实际”java

【讨论】:

  • 我启动了位于 java jdk 中的 Java VisualVM:运行 2 个不同的 java 程序时,我可以看到 2 个以 org 开头的不同进程。在 VisualVM 程序中使用所需的参数。有没有办法输出一个进程的属性?
  • 如果我的程序中有 PID,我不能用它来发现它,并打印出 JVM 参数吗?
  • @josef 我想你想再次阅读我的答案。 一般来说,你不能
  • 我认为我的问题没有清楚地表达自己,因为我找到了解决问题的方法。我创建了一个带有附加 PID 的 Virtual Maschine 类的变量,然后我可以通过打印出来找到我需要的参数。
猜你喜欢
  • 2015-06-03
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多