Я хотел бы отслеживать следующую системную информацию в 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 , который обычно можно использовать для коммерческих продуктов с закрытым исходным кодом.
Ответы:
В соответствии с тем, что я упоминал в этом посте . Я рекомендую вам использовать SIGAR API . Я использую SIGAR API в одном из своих собственных приложений, и это здорово. Вы найдете его стабильным, хорошо поддерживаемым и полным полезных примеров. Это с открытым исходным кодом с
лицензиейApache 2.0GPL 2. Проверьте это. У меня есть чувство, что оно будет соответствовать вашим потребностям.Используя Java и Sigar API, вы можете получить память, процессор, диск, среднюю загрузку, информацию и метрики сетевого интерфейса, информацию таблицы процессов, информацию о маршруте и т. Д.
источник
Следующее, якобы, дает вам процессор и оперативную память. См. ManagementFactory для более подробной информации.
источник
В JDK 1.7 вы можете получить системный процессор и использование памяти через
com.sun.management.OperatingSystemMXBean
. Это отличается отjava.lang.management.OperatingSystemMXBean
.источник
Это прекрасно работает без какого-либо внешнего API, просто скрытая функция Java
источник
Взгляните на эту очень подробную статью: http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking#UsingaSuninternalclasstogetJVMCPUtime
Чтобы получить процент использования процессора, все, что вам нужно, это несколько простых математических выражений:
Примечание: вы должны импортировать,
com.sun.management.OperatingSystemMXBean
а неjava.lang.management.OperatingSystemMXBean
.источник
Для дискового пространства, если у вас есть Java 6, вы можете использовать методы FileTotalSpace и getFreeSpace в File. Если вы не на Java 6, я думаю, что вы можете использовать Apache Commons IO, чтобы получить некоторые из них.
Я не знаю ни одного кроссплатформенного способа получить использование процессора или памяти, я боюсь.
источник
Многое из этого уже доступно через JMX. В Java 5 встроен JMX, и он включает в себя просмотрщик консоли JMX с JDK.
Вы можете использовать JMX для мониторинга вручную или вызывать команды JMX из Java, если вам нужна эта информация во время выполнения.
источник
Принятый ответ в 2008 году рекомендовал SIGAR. Однако, как говорится в комментарии от 2014 года (@Alvaro):
Я рекомендую использовать https://github.com/oshi/oshi
Или ответ, упомянутый выше .
источник
источник
Следующий код предназначен только для Linux (возможно, Unix), но он работает в реальном проекте.
источник
Создайте пакетный файл "Pc.bat" как, введитеperper -sc 1 "\ mukit \ processor (_Total) \ %% Processor Time"
Вы можете использовать класс MProcess,
}
Затем, после некоторой манипуляции со строками, вы получаете использование процессора. Вы можете использовать тот же процесс для других задач.
- Мукит Хасан
источник
typeperf "\processor(_total)\% processor time"
Если вы поместите ее в командный файл, используйте %% вместо%. Я использовал technet.microsoft.com/en-us/library/bb490960.aspx .