В настоящее время я создаю Java-приложение, которое может работать на разных платформах, но в первую очередь это варианты Solaris, Linux и Windows.
Кто-нибудь был в состоянии успешно извлечь информацию, такую как текущее используемое дисковое пространство, загрузка ЦП и память, используемая в основной ОС? Как насчет того, что потребляет само приложение Java?
Желательно, чтобы я получил эту информацию без использования JNI.
Runtime.getRuntime().freeMemory()
как указано в принятом ответе, НЕ дает вам объем свободной памяти.Ответы:
Вы можете получить ограниченную информацию о памяти из класса Runtime. Это действительно не совсем то, что вы ищете, но я подумал, что предоставлю это ради полноты. Вот небольшой пример. Редактировать: Вы также можете получить информацию об использовании диска из класса java.io.File. Для использования дискового пространства требуется Java 1.6 или выше.
источник
Пакет java.lang.management дает вам гораздо больше информации, чем среда выполнения - например, он даст вам кучную память (
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
) отдельно от не кучевой памяти (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
).Вы также можете получить нагрузку на процессор (без написания собственного кода JNI), но вам необходимо привести
java.lang.management.OperatingSystemMXBean
кcom.sun.management.OperatingSystemMXBean
. Это работает на Windows и Linux, я не проверял это в другом месте.Например ... вызывайте метод get getCpuUsage () чаще, чтобы получить более точные показания.
источник
OperatingSystemMXBean
наcom.sun.management.OperatingSystemMXBean
и предварите все экземплярыgetOperatingSystemMXBean()
сManagementFactory.
. Вы должны импортировать все классы соответствующим образом.getCpuUsage
среднего , что система использует все свои availableProcessors на 100%?((double)( processCpuTime - lastProcessCpuTime )) / ((double)( systemTime - lastSystemTime ))
Я думаю, что лучший способ - реализовать API SIGAR от Hyperic . Он работает для большинства основных операционных систем (чертовски близко ко всему современному) и с ним очень легко работать. Разработчики очень быстро реагируют на свои форумы и списки рассылки. Мне также нравится, что это
лицензия GPL2Apache . Они также предоставляют множество примеров на Java!SIGAR == Инструмент системной информации, сбора и отчетности.
источник
Есть Java-проект, который использует JNA (поэтому нет собственных библиотек для установки) и находится в активной разработке. В настоящее время он поддерживает Linux, OSX, Windows, Solaris и FreeBSD и предоставляет информацию об оперативной памяти, процессоре, батарее и файловой системе.
источник
Для окон я пошел по этому пути.
Вот ссылка с деталями.
источник
Вы можете получить некоторую информацию системного уровня
System.getenv()
, передав в качестве параметра имя соответствующей переменной среды. Например, в Windows:Для других операционных систем наличие / отсутствие и имена соответствующих переменных среды будут отличаться.
источник
Добавьте OSHI-зависимость через maven:
Получите оставшуюся емкость батареи в процентах:
источник
Посмотрите на API, доступные в пакете java.lang.management . Например:
OperatingSystemMXBean.getSystemLoadAverage()
ThreadMXBean.getCurrentThreadCpuTime()
ThreadMXBean.getCurrentThreadUserTime()
Там также есть множество других полезных вещей.
источник
Обычно, чтобы получить информацию об ОС низкого уровня, вы можете вызывать специальные команды ОС, которые предоставляют вам необходимую информацию с помощью Runtime.exec () или читать файлы, такие как / proc / * в Linux.
источник
Использование ЦП не является простым - java.lang.management через com.sun.management.OperatingSystemMXBean.getProcessCpuTime подходит близко (см. Превосходный фрагмент кода Патрика выше), но обратите внимание, что он дает только доступ ко времени, потраченному ЦП в вашем процессе. он не скажет вам о времени процессора, потраченном на другие процессы, или даже о времени процессора, потраченном на выполнение системных операций, связанных с вашим процессом.
например, у меня есть интенсивный по сети процесс Java - он работает только и процессор на 99%, но только 55% из них сообщается как «процессор процессора».
даже не заводите меня на «среднюю нагрузку», поскольку она почти бесполезна, несмотря на то, что это единственный элемент, связанный с процессором, в компоненте MX. лишь бы солнце в их редкой мудрости выставляло что-то вроде "getTotalCpuTime" ...
для серьезного мониторинга процессора SIGAR, упомянутый Мэттом, кажется лучшим выбором.
источник
На
Windows
, вы можете запуститьsysteminfo
команду и возвращает свой выход, например , с помощью следующего кода:источник
Если вы используете Jrockit VM, то здесь есть другой способ получить загрузку ЦП виртуальной машины. Компонент времени выполнения также может дать вам нагрузку на процессор на процессор. Я использовал это только в Red Hat Linux для наблюдения за производительностью Tomcat. Вы должны включить JMX remote в catalina.sh, чтобы это работало.
источник
Он все еще находится в стадии разработки, но вы уже можете использовать jHardware
Это простая библиотека, которая удаляет системные данные, используя Java. Работает как в Linux, так и в Windows.
источник
Один простой способ, который можно использовать для получения информации об уровне ОС, и я протестировал на моем Mac, который хорошо работает:
Вы можете найти много соответствующих метрик операционной системы здесь
источник
Эй, вы можете сделать это с интеграцией Java / Com. Получая доступ к функциям WMI, вы можете получить всю информацию.
источник
Чтобы получить среднее значение загрузки системы, равное 1 минуте, 5 минутам и 15 минутам внутри Java-кода, вы можете сделать это, выполнив команду,
cat /proc/loadavg
используя и интерпретируя ее, как показано ниже:И получить физическую системную память , выполнив команду
free -m
и затем интерпретировав ее, как показано ниже:источник