读取Java JVM启动参数(例如-Xmx)

47

我正在尝试找到一种方法来确定JVM启动属性,以便从正在运行的Java进程中获取。具体而言,我想知道像-Xmx(最大堆大小)和-XX:MaxPermSize等参数存储在哪里。我正在运行Sun的1.6 JVM。

如果你想知道为什么我想这样做,那是因为我有许多可能配置不正确的JVM Web服务器,并且我想将其添加到启动代码检查中。通过在部署到各处的Java代码片段中进行检查,这对我来说比手动查找和检查所有JVM启动文件要容易得多。目前,JVM配置文件无论好坏,都不是我们构建流程的一部分,也没有被检入源代码控制。

2个回答

55

尝试:

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参数。

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


你会在这篇文章中找到各种JVM工具的好总结(来自"Dustin's Software Development Cogitations and Speculations"),包括Java应用程序启动器链接到:

这种技术利用了自J2SE 5以来可用的平台MXBeans(在Java SE 6中添加了自定义MXBeans支持)。有关使用Sun的JVM时可用的JVM参数的两个有用信息来源是:JVM选项集合和Charles Nutter的Favorite Hotspot JVM Flags。这两个资源列出并描述了一些/全部不建议给普通开发人员使用的双倍X参数(-XX)。

运行得非常好!我显然不太了解java.lang.management。 - Bob Albright

10

使用Java 7或更高版本很容易,只需执行以下命令:

java -XshowSettings:all


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接