Это в значительной степени вопросы от новичка. (Я просмотрел другие связанные вопросы и ответы, но, похоже, ни один из них не отвечал точно на мои собственные вопросы.)
Мне нужно удаленно извлекать, анализировать и сообщать в программе Java об использовании процессора и памяти Linux-машины. Это должно быть сделано двумя отдельными командами вместо одной, чтобы разделить их, чтобы упростить, если одну команду нужно будет изменить в будущем.
Итак, мои вопросы:
Под лучшим я подразумеваю вывод команд:
Спасибо!
Вместо того, чтобы заново изобретать колесо, я бы предложил использовать демон SNMP в системе, которую вы собираетесь отслеживать, и клиентскую библиотеку SNMP в вашем приложении Java.
Оба элемента, которые вы хотите отслеживать, включены в net-snmpстандартные MIB / OID.
Тогда вам не нужно беспокоиться об извлечении нужных вам переменных из вывода других утилит или переносимости того, как вы собираетесь безопасно транспортировать эту информацию (предположительно, удаленная оболочка).
Если вам действительно нужно анализировать вывод консольной команды, вы, вероятно, захотите сделать в нем как можно меньше конвейеров и grepping.
Команда, которая, вероятно, дает самый простой вывод, который вы можете проанализировать, - это vmstat.
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
4 0 420 54512 20408 1504148 0 0 1193 994 530 1397 10 6 76 7
Что касается памяти, помните, что `` свободная '' выше - это объем свободной памяти без учета буферов и кеша как свободных, поэтому вы, вероятно, захотите добавить бафф и кеш для освобождения, чтобы получить `` реальный '' свободный объем MiB (то есть физическая память, которая напрямую доступна системе для использования).
Ниже CPU значения us, sy, id и wa соответствуют 'user', 'system', 'idle' и 'iowait'. Как и все другие перечисленные инструменты, vmstat показывает состояние в определенный момент времени. Обязательно обновляйте почаще ;-)
Команда top отображает информацию как о памяти, так и о процессоре, а также другую статистику.
Если вы хотите вызвать его из скрипта или приложения, используйте флаг -n 1, чтобы он не запускался в интерактивном режиме.
например, чтобы запустить использование ЦП
top -n 1 | grep "Cpu"
(result)
Cpu(s): 1.6%us, 1.8%sy, 0.0%ni, 92.1%id, 0.6%wa, 0.1%hi, 3.8%si, 0.0%st
для вызова использования памяти
top -n 1 | grep "Mem"
(result)
Mem: 1035240k total, 773088k used, 262152k free, 160348k buffers
Часть ответа «синтаксический анализ» включает в себя игру со стандартным выводом и форматированием строк в любом случае, если вы не используете SNMP, который (если это вариант) может дать вам гораздо больше информации.
Кроме того, команда «free» показывает числа об используемой памяти, «df» - об использовании диска, а «top» - о различных значениях.
обе команды дадут лучший результат от u H / W статус "верхний" лучше всего с RHEL
«Истинный способ Unix» - создавать сценарии с использованием доступных команд системной информации: free, ps, w, vmstat, iostat, ifstat, netstat и т. Д. (Подсказка: не используйте «top», это для интерактивного использования, черт возьми!)
«Способ Java» - это использовать библиотеку, сначала на ум приходит SNMP, но это может оказаться слишком большим молотком, чтобы расколоть такую маленькую гайку.
Так :
Если ваш сборщик написан на Java, вы можете рассмотреть возможность интеграции Сигар в ваше приложение. Sigar - это библиотека, которую инструмент мониторинга Hyperic использует для сбора статистики операционной системы.
мне нравиться htop
за цвет и сортировку