Как интерпретировать вывод команды Linux "top"?

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 ГБ памяти было использовано?

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

Googlebot
источник
@ephemient нет, это не тот случай. Я проверил все эти вещи. Это связано с PHP-FPM, и память будет освобождена только после перезапуска PHP-FPM. В любом случае значения Mem и buffer / cache в freeидентичны.
Googlebot
6
Похоже, вы используете Virtuozzo "VM". Все ставки сняты, если учесть память.
womble
Дорогая и мучительная, я украла оба твоих ответа! хихикает
Уэсли

Ответы:

34

TL; DR 1

Ваш сервер находится в каком-то контейнере virtuozzo / openvz / virtualization-du-jour . Попытка разобраться в использовании памяти - это наклон на ветряных мельницах.

TL; DR 2

Linux съел вашу оперативную память! Но это нормально, это делает это для всех.


Длинная история

Давайте разберемся с этим!

В Mem:разделе мы имеем:

  • $n total: объем физической оперативной памяти в вашей машине
  • $n used: сколько памяти потребляется Linux, а не просто сумма процессов.
  • $n free: Сколько оперативной памяти не используется Linux Это не учитывает, что кэшированная и буферизованная память по сути является «свободной».
  • $n buffers: буферное пространство - это место, где хранятся блоки дискового ввода-вывода, прочитанные или ожидающие записи. Буфер - это представление ОЗУ одного блока диска.

В Swap:разделе мы имеем:

  • $n total: Само за себя. Объем дискового пространства, доступного для обмена страницами.
  • $n used: Само за себя. Сколько дискового пространства используется.
  • $n free: Herp Derp.
  • $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:. Математика показывает, что использованное количество действительно (общее) - ((used-buffers) -эшируется). Бесплатно (всего) - (theNewUsed).

Что все это значит? Это означает, что Linux съел вашу оперативную память! Коротко говоря, ядро ​​Linux поглощает ОЗУ, поскольку оно доступно для кэширования диска. Вы ничего не можете с этим поделать, если не хотите пытаться скомпилировать собственное ядро. Совет: не надо.

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

Сохраняйте спокойствие и продолжайте. Кроме того, получите физический сервер (если вам не нравится статистика памяти, которая выглядит так, как будто Kreskin - это ваш SysAdmin).

Wesley
источник
Не используется ли количество ((used-buffers) -cached)?
Мак
1

Top не лучший способ проверить использование памяти. Однако, поскольку мой вопрос был помечен как дубликат этого вопроса, я собираюсь опубликовать свое решение здесь.

Я прочитал на форуме, что 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
=================================
пользователь
источник