Як використовувати пам'ять (використовується оперативна пам'ять) за допомогою команди Linux?


30

Я намагаюся отримати пам'ять, що використовується (RAM) у відсотках, використовуючи команди Linux. Мій cpanel показує пам'ять, яка використовується, яку мені потрібно відобразити на певній веб-сторінці.

З форумів я з’ясував, що правильну пам'ять можна знайти з наступного:

free -m

Результат:

-/+ buffers/cache:        492       1555

- / + буфери / кеш: містить правильне використання пам'яті. Я не знаю, як проаналізувати цю інформацію або чи є якась інша команда для отримання пам'яті, яка використовується у відсотках.


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) дає використання пам'яті своп. Немає буфера чи кешу для 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
Чи "- / + буфери / кеш: 5779440 18904464" правильне використання оперативної пам'яті / стан сервера?
codelogn

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

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

10

Я згадаю про те, як розібрати інформацію по freeкоманді. Щоб знайти відсоток, ви можете використовувати, як запропоновано в інших 2 відповідях.

Це чітко пояснено тут . Я б спробував пояснити, що я маю в своїй системі.

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 Позначає загальну оперативну пам'ять, що використовується для кешування даних для майбутнього призначення.

Рядок2

-/+ buffers/cache:        696       7173

Як обчислити значення 696 та 7173, отримані в Line2?

Загальна використана ( 4402 ) - Загальна оперативна пам'ять буфера ( 208 ) - Загальна оперативна пам'ять для кешування ( 3497 ) повинна становити фактично використану оперативну пам'ять в системі. Він повертає мені 697, що є фактично використаним виведенням ОЗУ у другому рядку.

Тепер Total Total ( 7869 ) - фактично використаний ( 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
FYI Я отримую таке, використовуючи це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 ("використовується:% .0f %%"), $ 3 / $ 2 * 100 Це працює з і мавк, і гаук.
Ján Lalinský

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}' 

Після номера swap додає новий рядок


1

Для upto CentOS 7 Ви можете спробувати

cat /proc/meminfo 

щоб побачити реальне використання пам'яті процесами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.