Сейчас в ядре два параметра, отвечающих за overcommit памяти:
vm.overcommit_memory — отвечает за стратегию overcommit.
vm.overcommit_ratio — отвечает за уровень (в процентах) overcommit
Стратегии. Их сейчас несколько:
OVERCOMMIT_GUESS 0 — эвристический подход к распределению памяти. В нем выделяется столько памяти, сколько хочет процесс. Но в swap/res попадает только те страницы, которые используются этим процессом (mm/mmap.c:118).
OVERCOMMIT_ALWAYS 1 — overcommit памяти есть всегда. Использовать лучше с совсем кривыми приложениями (mm/mmap.c:112).
OVERCOMMIT_NEVER 2 — без overcommit. В этом случае допустимый объем пространства памяти будет total_swap + alowed, где alowed = total_ram * overcommit_ratio / 100 (mm/mmap.c:168).
По умолчанию используется стратегия OVERCOMMIT_GUESS, а vm.overcommit_ratio находится в значение 50% и будет использоват только в случае OVERCOMMIT_NEVER (mm/mmap.c:84).
Хочется отметить, что система всегда резервирует ~3% памяти для процессов пользователя root
======================================================================
в условиях нехватки свободной памяти происходит сканирование памяти на предмет dirty страничек частота сканирования задается через параметр dirty_writeback_centisecs после нахождения dirty pages ядро сравнивает их «возраст» с параметром dirty_expire_centisecs если возраст страницы больше или равно — записать их на диск
размер dirty страниц максимальный размер страничек порожденных одним процессом (лимит, после которого они в обязательном порядке будут записаны) устанавливается через dirty_ratio в процентах от общего размера памяти
dirty_background_ratio Минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход. по идее оно должно быть равно размеру (или четным) блока файловой системы во избежание фрагментации
по идее необходимо увеличить частоту сканирования (увеличится энергопотребление) и нагрузка на винт понизить dirty_expire_centisecs (больше страниц попадает под запись)
понизить dirty_ratio понизить dirty_background_ratio (но не меньше dirty_ratio) и не меньше чем размер блока на фс
покрутил параметры и так и этак — стали активно чистится buffers
##### ==============================================================
1.1. Если вы хотите ускорить работу системы (особенно те, кому жалко не задействованой оперативки во время работы системы), то измените значение системы, примерно, так: swappiness = 10 , vfs_cache_pressure = 1000 :
# #echo 10 > /proc/sys/vm/swappiness
echo 1000 > /proc/sys/vm/vfs_cache_pressure
1.2. Если вы хотите больше использовать своп и кэширование файлов (актуально, например, при просмотре мелких картинок и т.п., а так же тем у кого оперативки меньше 128Мб), то измените значение системы, примерно, так:
swappiness = 100 , vfs_cache_pressure = 10 :
# #echo 100 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure