Как получить программный доступ для проверки значений аргументов JVM -Xms -Xmx и -XX:MaxPermSize?

Возможный дубликат:
Чтение параметров запуска Java JVM (например, -Xmx)

Я запускаю приложение на сервере Tomcat и хочу получить доступ к значениям аргументов JVM -Xms -Xmx и -XX:MaxPermSize, чтобы я мог регистрировать их для получения помощи при отладке.

Я пытался найти эти аргументы, перечисленные в System.properties, и используя System.getEnv(), но их там нет. Есть ли другой способ их получить, или, наоборот, их отсутствие в System.properties и System.getEnv() свидетельствует о том, что эти параметры не установлены?


person Spike Williams    schedule 19.12.2011    source источник
comment
Это полезное решение, хотя приведенная ниже идея Runtime.totalMemory() является хорошим дополнением к нему, потому что она полезна в случае, когда -Xms не установлен, но вы все равно хотите увидеть, сколько памяти имеется по умолчанию ( как оказалось в случае с моей проблемой).   -  person Spike Williams    schedule 19.12.2011
comment
Зачем делать это программно? Он установлен в конфигурации Tomcat. Просто копируйте это при каждом запуске.   -  person user207421    schedule 20.12.2011
comment
Потому что я не контролирую серверы и не имею доступа к конфигурации Tomcat без необходимости выслеживать и беспокоить системных администраторов.   -  person Spike Williams    schedule 20.12.2011


Ответы (2)


Вы можете получить основную информацию из класса Runtime, включая общую, максимальную и свободную память; подробности см. в Runtime JavaDoc.

Если этой информации недостаточно, вы можете использовать расширения управления, чтобы получить гораздо больше информации о текущем и пиковом использовании памяти в каждом из пулов памяти. Вы можете просмотреть всю доступную информацию о работающей JVM на вкладке MBeans на странице JConsole, который входит в состав Oracle JDK. В частности, посмотрите на MBeans с именем объекта java.lang:type=Memory и java.lang:type=MemoryPool,name=*.

После того как вы идентифицировали компоненты MBean с необходимой вам информацией, вы можете получить к ним программный доступ с помощью ManagementFactory. Это обеспечивает общий доступ ко всем компонентам MBean (вы можете создать свой собственный), но имеет удобные методы для некоторых компонентов MBean, предоставляемых платформой, в том числе:

person Wesley Hartford    schedule 19.12.2011

Как насчет Runtime.totalMemory () (конечно, если у вас есть разрешения или безопасность отключена) ?

Другой обходной путь — найти командную строку, которая запустила tomcat, и проанализировать ее. В линуксе легко, а в винде...

person Valchev    schedule 19.12.2011
comment
Это для Xms. Для Xmx можно использовать Runtime.getRuntime().maxMemory(). - person John29; 11.01.2018