Там не существует никакой платформенно независимый путь, который, как могут гарантировать, будет работать во всех jvm реализациях. ManagementFactory.getRuntimeMXBean().getName()
похож на лучшее (самое близкое) решение. Это коротко, и , вероятно работы в каждой реализации в широком использовании.
На linux+windows это возвращает значение как 12345@hostname
(12345
являющийся идентификатором процесса). Остерегайтесь, хотя это согласно документам , нет никаких гарантий об этом значении:
Возвраты имя, представляющее рабочую виртуальную машину Java. Возвращенная строка имени может быть любой произвольной строкой, и реализация виртуальной машины Java может принять решение встроить определенную для платформы полезную информацию в возвращенную строку имени. Каждая рабочая виртуальная машина могла иметь другое имя.
В Java 9 новое API процесса может использоваться:
long pid = ProcessHandle.current().pid();
Я использовал JMX для предоставления MBean-компонента, который позволит динамически регулировать уровни Log4J Logger. Это оказалось очень полезным для кластерного приложения, в котором мы не хотели изменять файл конфигурации log4j на всех узлах, чтобы изменить уровень журнала для указанного регистратора.
Моим наиболее частым требованием является мониторинг количества потоков и памяти. Моя последняя работа включала диспетчеризацию серверов с большим количеством потоков в сети, и было важно отслеживать использование потоков (мера того, какой объем диспетчерской работы выполнял сервер). Память тесно связана с использованием потока (частично из-за объектов, связанных с каждым потоком, частично из-за неявного выделения стека для каждого потока).
Мы также поддерживаем JMX для данных нашей очереди рабочей нагрузки. Выше были отслежены симптомы или эффекты рабочих элементов в очереди, но в конечном итоге мы хотели отслеживать фактические очереди работы. Стоит раскрыть ключевые компоненты через JMX, чтобы получить более четкое представление о том, что происходит.
Немного OT, но вы можете использовать JMX для большего. В настоящее время я использую JMX для горячего развертывания / исправления компонентов. Динамически добавлять функциональность к существующим компонентам (фильтр и т. Д.). JMX хорош для связи между компонентами на одной JVM. Каждый компонент, который я создаю, приспособлен для использования JMX.
В предыдущем проекте мы отслеживали количество потоков и память, количество HTTP-сеансов и размер кэшей запросов. Другой интерес JMX с кешами заключается в том, что вы можете принудительно выполнить сброс.