46

我试图弄清楚是否有一种方法可以从正在运行的 java 进程中确定 JVM 启动属性。具体来说,我试图找出 -Xmx(最大堆大小)和 -XX:MaxPermSize 等参数的存储位置。我正在运行 Sun 的 1.6 jvm。

如果您想知道我为什么要这样做,我有许多 JVM 网络服务器,它们可能配置正确也可能不正确,我想将其添加到启动代码检查中。与手动查找和检查所有 jvm 启动文件相比,签入一段部署在各处的 java 代码对我来说要容易得多。现在,无论好坏,jvm 配置文件都不是我们构建过程的一部分,也没有检查到源代码控制中。

4

2 回答 2

53

尝试:

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

import java.util.List;

public void runtimeParameters() {
  RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
  List<String> aList = bean.getInputArguments();

  for (int i = 0; i < aList.size(); i++) {
    System.out.println( aList.get( i ) );
  }
}

这应该显示所有 JVM 参数。

注意:我们在 VCS 中也没有 JVM 参数,但在数据库中,由我们自己的启动器在生产中读取。这样,我们可以远程更改这些值,而无需重新部署 JVM 参数文件设置。


您将在本文中找到要使用的各种JVM 工具的一个很好的总结(来自“Dustin 的软件开发思考和推测”),包括 Java 应用程序启动器链接到:

该技术利用自J2SE 5以来可用的 Platform MXBeans( Java SE 6中添加了自定义 MXBeans 支持)。

使用 Sun 的 JVM 时可用的 JVM 参数的两个有用信息来源是:

这两个资源都列出并描述了一些/所有不推荐用于休闲开发者的可用双X参数 ( )。-XX

于 2009-10-05T04:20:35.620 回答
10

使用 Java 7 或更高版本,它就像

java -XshowSettings:all

于 2013-01-17T17:54:45.870 回答