Моё предложение: дополнять скрипты редких ресурсоёмких задач командами очистки кэша.
К ресурсоёмким задачам, забивающим кэш лишней информацией я отношу следующие задачи, при условии их редкого выполнения:
- Архивация (в моём случае tar способен "съесть" всю свободную память)
- Обновление через yum
- Анализ статистики веб-сервера и построение отчётов
Как известно, в версии ядра 2.6.16 (и более свежих) появился механизм, который вынуждает ядро сбросить страничный кэш и/или кэши inode+dentry. После выполнения команды высвобождается существенный объем ОЗУ. Ходят легенды, что издревле несчастные администраторы писали специальные скрипты, которые пытались выделить тонны памяти с единственной целью: чтобы изгнать кэш из памяти :)
Для использования /proc/sys/vm/drop_caches
достаточно передать число.
Чтобы сбросить страничный кэш:
echo 1 > /proc/sys/vm/drop_caches
Чтобы сбросить кэши dentry и inodes:
echo 2 > /proc/sys/vm/drop_caches
Чтобы сбросить страничный кэш, dentry и inodes:
echo 3 > /proc/sys/vm/drop_caches
Теперь выполним лабораторную работу.
На веб-сервере, работающем под CentOS 6.6, было замечено, что в обычном режиме достаточно 1 Гб ОЗУ для выполнения всех задач, причем этот лимит никогда не превышается, а файл подкачки постоянно держится на величине 0 Kb. Однако, после выполнения тяжелых задач память целиком забивается, и - самое обидное! - сервер начинает своппить на обычных простых задачах, постепенно забивая файл подкачки и постоянно напрягая жесткий диск. Проведём мониторинг памяти до (красным) и после (синим) выполнения сброса.
Выигрыш очевиден. Если раньше было свободно 87 Мб, то стало свободно 1456 Мб даже при условии, что в качестве параметра сброса мы передавали единицу.
Теперь сервер в состоянии проработать ещё неделю, совершенно не напрягая жесткий диск.
This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.
Дискуссия
Написал Rocky 9
Опубликовано в: Установка nginx c PHP-FPM под CentOS 7.0 in LinuxНаписал Константин
Опубликовано в: Докеризация стека LEMP под Ubuntu c помощью Compose in LinuxНаписал bammbr
Опубликовано в: Шлюз для маленького отдела на Red Hat 9 in LinuxНаписал Федор
Опубликовано в: Установка и конфигурация Samba на CentOS 7 in LinuxНаписал Evgenytrl
Опубликовано в: Загрузка файлов с помощью Wget in Linux