Я хотел бы отслеживать следующую системную информацию на Java:
- Текущая загрузка ЦП ** (в процентах)
- Доступная память * (свободная / всего)
Доступное дисковое пространство (свободное / всего)
* Обратите внимание, что я имею в виду общую память, доступную для всей системы, а не только для JVM.
Я ищу кроссплатформенное решение (Linux, Mac и Windows), которое не полагается на мой собственный код, вызывающий внешние программы или использующий JNI. Хотя это жизнеспособные варианты, я бы предпочел не поддерживать код, специфичный для ОС, сам, если у кого-то уже есть лучшее решение.
Если есть бесплатная библиотека, которая делает это надежным кроссплатформенным способом, это было бы здорово (даже если она выполняет внешние вызовы или использует собственный код).
Любые предложения очень ценятся.
Чтобы уточнить, я хотел бы получить текущее использование ЦП для всей системы, а не только для процесса (ов) Java.
SIGAR API предоставляет все функции, которые я ищу, в одном пакете, так что это пока лучший ответ на мой вопрос. Однако из-за того, что он находится под лицензией GPL, я не могу использовать его для своих первоначальных целей (закрытый исходный код, коммерческий продукт). Возможно, что Hyperic может лицензировать SIGAR для коммерческого использования, но я не рассматривал это. Что касается моих проектов GPL, я обязательно рассмотрю SIGAR в будущем.
Для моих текущих потребностей я склоняюсь к следующему:
- Для использования ЦП
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(средняя загрузка на ЦП) - Для памяти
OperatingSystemMXBean.getTotalPhysicalMemorySize()
иOperatingSystemMXBean.getFreePhysicalMemorySize()
- Для дискового пространства
File.getTotalSpace()
иFile.getUsableSpace()
Ограничения:
getSystemLoadAverage()
и методы запроса дискового пространства доступны только в Java 6. Кроме того, некоторые функции JMX могут быть доступны не для всех платформ (т.е. сообщалось, что getSystemLoadAverage()
возвращает -1 в Windows).
Хотя изначально под лицензией GPL, он был изменен на Apache 2.0, который обычно можно использовать для коммерческих продуктов с закрытым исходным кодом.