5

Как я могу получить процент использования ЦП и процент оперативной памяти, напечатанные в одной строке в Linux? (Используя cli)

Я должен передать эти выходные строки на ЖК-дисплей.

Большое спасибо

2 ответа2

3

Используйте AWK для разбора вывода сверху

top -bn1 | awk '/Mem/ { mem = "Memory in Use: " $5 / $3 * 100 "%" };
                /Cpu/ { cpu = "CPU in Use: " 100 - $8 "%" };
                END   { print mem ", " cpu }'

Он будет использовать пакетный режим top для однократной печати статистики, которую вы затем сможете анализировать любым способом с помощью awk. Например, приведенный выше код дал это в моем тесте:

Используемая память: 93,866%, загрузка процессора: 1,7%

Очевидно, ваш вывод будет отличаться. Вы также можете настроить формат вывода, если вам нужно больше (или меньше) информации.

2

Вы можете проанализировать вывод некоторых утилит Unix, таких как vmstat:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  75812 282632 115704 891332    0    1    22    54  138  362 15  2 80  2
$ vmstat | sed -n '3s/ \+/\t/gp' | cut -f5,14
280904  15

Выше печатает свободную память и использование процессора.

Если вы хотите использовать память, вы можете использовать другую утилиту, например top в пакетном режиме, как это было предложено CodeGnome и мной в предыдущем ответе.

$ top -bn1 | sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/.*,  ([0-9]+) .*/\1/p' | tr '\n' ' '
10.4 3787340

Или, чтобы получить проценты, вы можете сделать

$ top -bn1 | \
> sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/[^0-9]*([0-9]+)[^0-9]+([0-9]+) .*/\1 \2/p' | \
> { read cpu; read tot used; echo $cpu $(( 100*used/tot )); }
10.3 94

Я уверен, что есть более элегантные решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .