如何获得程序化访问以检查-Xms、-Xmx和-XX:MaxPermSize JVM参数的值?

4

可能是重复问题:
阅读Java JVM启动参数(例如-Xmx)

我正在Tomcat服务器上运行应用程序,并希望访问-Xms -Xmx-XX:MaxPermSize JVM参数值,以便我可以记录它们以帮助调试。

我尝试在System.properties中查找这些参数,并使用System.getEnv(),但它们不在那里。是否有另一种方法来获取它们,或者,替代地,它们不在System.propertiesSystem.getEnv()中的缺乏表示这些选项未被设置?


这是一个有用的解决方案,尽管下面列出的Runtime.totalMemory()想法是一个很好的补充,因为它在没有设置-Xms的情况下非常有用,但你仍然想看到默认情况下有多少内存(正如我的问题所显示的那样)。 - Spike Williams
为什么要通过编程实现?这已经在Tomcat配置中设置了。只需在每次启动时复制即可。 - user207421
因为我无法控制服务器,也无法在不追踪和打扰系统管理员的情况下访问Tomcat配置。 - Spike Williams
2个回答

4

如果您拥有权限,或安全性被禁用,可以尝试使用 Runtime.totalMemory() 方法。

另一种解决方法是查找启动tomcat的命令行并解析它。在Linux中很容易实现,但在Windows中可能较为困难。


这是针对Xms的。对于Xmx,可以使用Runtime.getRuntime().maxMemory() - John29

4

您可以从Runtime类获取基本信息,包括总内存、最大内存和可用内存;有关详细信息,请参阅Runtime JavaDoc

如果这不足够,您可以使用管理扩展程序获取更多有关每个内存池当前和峰值内存使用情况的信息。您可以使用随Oracle JDK一起提供的JConsole上的MBeans选项卡浏览运行中JVM的所有可用信息。具体来说,请查看对象名称为java.lang:type=Memoryjava.lang:type=MemoryPool,name=*的MBeans。

一旦您确定了需要的信息的MBeans,就可以使用ManagementFactory类以编程方式访问它们。这允许对所有MBeans进行通用访问(您可以创建自己的MBeans),但是对于平台提供的一些MBeans具有方便的方法。


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