Как использовать используемую память (RAM) с помощью команды Linux?


30

Я пытаюсь восстановить используемую память (ОЗУ) в процентах, используя команды Linux. Моя cpanel показывает используемую память, которую мне нужно отобразить на определенной веб-странице.

Из форумов я узнал, что правильную память можно найти из следующего:

free -m

Результат:

-/+ buffers/cache:        492       1555

- / + buffers / cache: содержит правильное использование памяти. Я не знаю, как анализировать эту информацию или есть какая-либо другая команда, чтобы получить объем используемой памяти в процентах.


3
Это уже здесь ответили! stackoverflow.com/questions/10585978/… напр .: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher

@szboardstretcher Мне нравится этот:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me

Не зная, для чего нужен номер, трудно сказать, какой номер использовать. Однако во многих случаях любое из этих чисел просто очень наивно и требует информации о трендах и контексте.
eckes

Ответы:


33

Вот пример вывода из бесплатных:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

Первая строка чисел ( Mem:) списков

  • total объем памяти
  • used объем памяти
  • free объем памяти
  • использование shared
  • использование buffers
  • использование кешей файловой системы ( cached)

В эту строку used входят буферы и кеш, и это влияет бесплатно. Это не ваша «настоящая» свободная память, потому что система будет создавать дамп кеша, если это необходимо для удовлетворения запросов на распределение.

Следующая строка ( -/+ buffers/cache:) дает нам фактически используемую и свободную память, как если бы не было буферов или кеша.

Последняя строка ( Swap) показывает использование памяти подкачки. Там нет буфера или кеша для подкачки, так как не имеет смысла помещать эти вещи на физический диск.

Для вывода используемой памяти (за исключением буферов и кеша) вы можете использовать такую ​​команду:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Это захватывает третью строку и делит использованный / всего * 100.

И для свободной памяти:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

1
Является ли "- / + buffers / cache: 5779440 18904464" правильным использованием ОЗУ / состоянием сервера?
Codelogn

2
Строго говоря, нет, но практически говоря, да. Фактическое использование памяти - это вторая строка (используется: 20746840), но часть этого использования памяти - это буферы и кэш, которые просто ускоряют время отклика в вашей системе. Третья строка (используется: 5779440) дает вам объем памяти, фактически используемый программами, и именно этот показатель памяти определяет, сколько еще может выделить ваша программа. Если ваша цель состоит в том, чтобы получить свободную / использованную память с точки зрения того, какие программы на самом деле используются и что вы действительно можете выделить, тогда да, строка 3 подходит вам.
Кейси

1
Обратите внимание , что с более поздними версиями free, -/+ buffers/cacheполностью опущен преднамеренно, и значение показано в usedколонке Теперь исключает буфера и кэш по умолчанию. Смотрите здесь: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson

10

Я собираюсь упомянуть о том, как разобрать информацию о freeкоманде. Чтобы найти процент, вы можете использовать, как предложено в двух других ответах.

Это ясно объяснено здесь . Я бы попытался объяснить, что у меня есть в моей системе.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Теперь давайте посмотрим, что на самом деле представляют различные цифры.

Линия 1

  • 7869 Указывает память / физическую память, доступную для моей машины.
  • 4402 Указывает память / ОЗУ, используемые моей системой.
  • 3466 Указывает на общее ОЗУ, свободное и доступное для запуска нового процесса.
  • 0 Указывает на общую память. Этот столбец устарел и может быть удален в будущих бесплатных выпусках.
  • 208 Указывает общий объем ОЗУ, буферизованный различными приложениями в Linux.
  • 3497 Указывает общий объем ОЗУ, используемый для кэширования данных для будущих целей.

Line2

-/+ buffers/cache:        696       7173

Как рассчитать значения 696 и 7173, полученные в строке 2?

Общее количество использованных ( 4402 ) - Общее количество буферной памяти ( 208 ) - Общее количество памяти для кеширования ( 3497 ) должно составлять фактическую используемую память в системе. Он возвращает мне 697, который является фактически используемым выходом ОЗУ во второй строке.

Теперь Total Available ( 7869 ) - Actual Used ( 696 ) должен дать вам свободную память, которая в данном случае составляет 7173, которая также получается как вывод во второй строке.


6

Несмотря на дубликат, указанный @szboardstretcher, я предпочитаю решения (в исходном вопросе) ниже, особенно если вы хотите проанализировать веб-страницу.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Выход:

used: 82.68%, buffers: 42.81%, swap: 1.27%

4
К вашему сведению, я получаю следующее с помощью этогоused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

Какая полная команда используется? Я проверил это в сентосах.
Simply_Me

Извините за форматирование, но здесь вы идете$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj

Для некоторых версий awk (mawk) знак процента должен быть удвоен, чтобы напечатать его, в противном случае awk выдает ошибку, например: printf ("used:% .0f %%"), $ 3 / $ 2 * 100. Это работает с и ястреб, и ястреб.
Ян Лалинский

2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Добавляет новую строку после номера подкачки


1

Для CentOS 7 вы можете попробовать

cat /proc/meminfo 

увидеть реальное использование памяти процессами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.