Я хотел бы отслеживать следующую системную информацию в Java:
- Текущее использование процессора ** (в процентах)
- Доступная память * (бесплатно / всего)
Свободное место на диске (бесплатно / всего)
* Обратите внимание, что я имею в виду общую память, доступную для всей системы, а не только для JVM.
Я ищу кроссплатформенное решение (Linux, Mac и Windows), которое не зависит от моего собственного кода, вызывающего внешние программы или использующего JNI. Хотя это жизнеспособные варианты, я бы предпочел не поддерживать специфичный для ОС код, если у кого-то уже есть лучшее решение.
Если есть бесплатная библиотека, которая делает это надежным, кроссплатформенным способом, это было бы замечательно (даже если она выполняет внешние вызовы или использует сам нативный код).
Любые предложения очень ценятся.
Чтобы уточнить, я хотел бы получить текущее использование процессора для всей системы, а не только для процесса (ов) Java.
API SIGAR предоставляет все функции, которые я ищу в одном пакете, так что это лучший ответ на мой вопрос на данный момент. Однако из-за того, что он лицензирован по лицензии 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 , который обычно можно использовать для коммерческих продуктов с закрытым исходным кодом.