После обсуждения ЗДЕСЬ о том, как 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 ГБ памяти было использовано?
free
идентичны.Ответы:
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
. Вы увидите три строки, и все числа будут соотноситься с вершиной. В качестве примера приведу свой компьютер:Строка 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).
источник
Top не лучший способ проверить использование памяти. Однако, поскольку мой вопрос был помечен как дубликат этого вопроса, я собираюсь опубликовать свое решение здесь.
Я прочитал на форуме, что ps_mem.py проверит использование памяти для вас.
Репозиторий: https://github.com/pixelb/ps_mem/
Скачать:
Использование:
Выход:
источник