Я хотел бы отслеживать следующую системную информацию в 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()
Сообщалось, что getSystemLoadAverage()
возвращает -1 в Windows).
Хотя изначально он был лицензирован по лицензии GPL, он был изменен на Apache 2.0, который обычно можно использовать для коммерческих продуктов с закрытым исходным кодом.