Я хотел бы отслеживать следующую системную информацию в 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 , который обычно можно использовать для коммерческих продуктов с закрытым исходным кодом.