Java 如何通过编程访问check-Xms-Xmx和-XX:MaxPermSize JVM参数值?

Java 如何通过编程访问check-Xms-Xmx和-XX:MaxPermSize JVM参数值?,java,tomcat,jvm-arguments,Java,Tomcat,Jvm Arguments,可能重复: 我正在Tomcat服务器上运行一个应用程序,我想访问-Xms-Xmx和-XX:MaxPermSizeJVM参数值的值,以便记录它们以获得调试帮助 我试图找到System.properties中列出的这些参数,并使用System.getEnv(),但它们不在那里。是否有其他方法获取它们,或者,它们在System.properties和System.getEnv()中不存在表示这些选项尚未设置?如何处理(当然,如果您有权限,或者安全性已禁用) 另一种解决方法是搜索启动tomcat的命令

可能重复:

我正在Tomcat服务器上运行一个应用程序,我想访问
-Xms-Xmx
-XX:MaxPermSize
JVM参数值的值,以便记录它们以获得调试帮助

我试图找到
System.properties
中列出的这些参数,并使用
System.getEnv()
,但它们不在那里。是否有其他方法获取它们,或者,它们在
System.properties
System.getEnv()
中不存在表示这些选项尚未设置?

如何处理(当然,如果您有权限,或者安全性已禁用)


另一种解决方法是搜索启动tomcat的命令行并对其进行解析。在linux中很容易,但在windows中

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

如果这还不够,您可以使用管理扩展来获取关于每个内存池中当前和峰值内存使用情况的更多信息。您可以使用上的MBeans选项卡浏览正在运行的JVM的所有可用信息,该选项卡包含在Oracle JDK中。具体来说,请查看对象名为java.lang:type=Memory和
java.lang:type=MemoryPool,name=*
的MBean

一旦用所需的信息标识了MBean,就可以使用类以编程方式访问它们。这允许对所有MBean进行通用访问(您可以自己创建),但对平台提供的一些MBean有方便的方法,包括:


这是一个很有帮助的解决方案,尽管下面列出的Runtime.totalMemory()思想是对它的一个很好的补充,因为它在没有设置-Xms的情况下很有用,但您仍然希望看到默认情况下有多少内存(我的问题就是这样)。为什么要以编程的方式这样做?它是在Tomcat配置中设置的。只要在每次启动时复制它就行了。因为我不控制服务器,并且不需要跟踪和打扰系统管理员就无法访问Tomcat配置。这是针对Xms的。对于Xmx
Runtime.getRuntime().maxMemory()