Як інтерпретувати вихід з команди 'top' Linux?


27

Після дискусії, проведеної ТУТ про те, як PHP-FPMспоживає пам'ять, я просто знайшов проблему в читанні пам'яті в topкоманді. Ось скріншот мого topодразу після перезавантаження PHP-FPM. Все нормально: близько 20 PHP-FPMпроцесів, кожен з яких споживає 5,5 МБ пам'яті (0,3% від загальної кількості).

введіть тут опис зображення

Тут знаходиться застарілий сервер безпосередньо перед перезавантаженням PHP-FPM(через день після попереднього перезавантаження). Тут у нас все ще близько 25 PHP-FPMз подвійним використанням пам'яті (10 МБ вказує на 0,5% від загальної кількості). Таким чином, загальна використовувана пам'ять повинна становити 600-700 МБ. Тоді, чому використовується 1,6 Гб пам'яті?

введіть тут опис зображення



@ephemient ні, це не так. Я перевірив усі ці речі. Це щось пов’язане з PHP-FPM, і пам'ять буде звільнена, перезавантажившись лише PHP-FPM. У будь-якому випадку значення Mem і буфера / кешу в freeідентичні.
Googlebot

6
Схоже, ви працюєте з VM Virtuozzo. Усі ставки відключені, якщо облік пам'яті ведеться на ці речі.
жіноча


Дорогий уродливий і ефемерний: я вкрав обидві ваші відповіді! кекі
Веслі

Відповіді:


34

TL; DR 1

Ваш сервер перебуває в контейнері virtuozzo / openvz / virtualization-du-jour . Намагання осмислити використання пам’яті - це нахили на вітряках.

TL; DR 2

Linux з'їв вашу оперативну пам’ять! Але це нормально, це роблять всі.


Довга історія

Давайте розбимо його!

У Mem:розділі ми маємо:

  • $n total: кількість фізичної оперативної пам’яті у вашій машині
  • $n used: скільки пам’яті споживає Linux, а не лише сума процесів.
  • $n free: Скільки оперативної пам’яті Linux не споживає. Це не враховує, що кешована і забудована пам'ять по суті є "безкоштовною".
  • $n buffers: буферний простір - це зберігання блоків дискових вводу-виводу, які були прочитані або очікують на запис. Буфер - це RAM-представлення одного блоку диска.

У Swap:розділі ми маємо:

  • $n total: Пояснення самостійно. Обсяг дискового простору, на який можна поміняти сторінки.
  • $n used: Пояснення самостійно. Скільки місця для заміни диска.
  • $n free: Герп Дерп.
  • $n cache: Тісно пов'язані з буферами вище. Він фактично є частиною кеш-сторінки сторінки і сам не має місця на фізичному диску. Не хвилюйтесь щодо деталей цієї розмови.

Цікава частина приходить, коли ти біжиш free -m. Ви побачите три рядки, і всі числа співвідносяться з вершиною. Я наведу власний ПК як приклад:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Рядок Mem показує загальну оперативну пам’ять у мегабайтах ( $n totalвгорі), скільки використовується ( $n usedвгорі), скільки вільного ( $n freeвгорі), скільки спільного доступу (ігноруйте це), і тепер приходить хороша частина! buffersІ cachedстовпці в free -mкорелюють, передбачувано, $n buffersі $n cache. Але погляньте на другий ряд, з free -mякого починається -/+ buffers/cache:. Математика показує, що використана кількість дійсно (загальна) - ((використані буфери) -кешована). Безкоштовно є (усього) - (TheNewUsed).

Що все це означає? Це означає, що Linux з’їв вашу оперативну пам’ять! Коротка історія полягає в тому, що ядро ​​Linux збиває оперативну пам’ять, оскільки її можна використовувати для кешування диска. З цим нічого не можна зробити, якщо не захочеться скомпілювати користувацьке ядро. Порада: Не варто.

Оперативна пам’ять дійсно є і безкоштовна для процесів, які можна використовувати за їх примхою. Ось що означає -/+ buffers/cache:рядок в free -m. Однак, ви знаходитесь у контейнері для віртуалізації, який не містить гіпервізорів, що робить трішки хитрощів. Ви просто не можете підвести підсумок пам’яті з точністю байтів. Однак ви не бачите жодної поведінки, яка страшенно незвична.

Зберігай спокій і продовжуй. Крім того, придбайте фізичний сервер (якщо вам не подобається статистика пам'яті, схожа на Крескіна, це ваш SysAdmin).


Чи не використана сума є (кешована використовуваними буферами)?
мак

1

Топ - не найкращий спосіб перевірити використання пам'яті. Однак, оскільки моє запитання було позначене як дублікат цього питання, я збираюся опублікувати свою резолюцію тут.

Я читав на форумі, що ps_mem.py перевірить використання пам'яті для вас.

Репозиторій: https://github.com/pixelb/ps_mem/

Завантажити:

pip install ps_mem

Використання:

ps_mem

Вихід:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.