Заметка о vm.swappiness

vm.swappiness задаёт относительную стоимость выгрузки анонимных страниц в swap по сравнению с освобождением файлового кеша. Это не процент занятой или свободной памяти и не порог включения swap: значение 60 не означает, что swap включится при занятии 40% RAM.

В документации ядра Linux описан диапазон 0–200. Значение по умолчанию — 60; подходящее значение зависит от нагрузки и скорости swap относительно файловой системы. Значение 5 ниже — пример настройки, а не универсальная рекомендация для сервера. Для zram или быстрого swap могут быть уместны значения выше 100.

Проверим текущее значение:

$ cat /proc/sys/vm/swappiness    
60
$ sysctl -a | grep swappiness
vm.swappiness = 60

Для того, чтобы изменить это положение дел, нужно добавить в файл /etc/sysctl.conf строку vm.swappiness=5. Если следовать рекомендациям в файле /etc/sysctl.d/README.sysctl, то правильным выбором будет создание файла в директории /etc/sysctl.d/*.conf.

Для локальных изменений создим файл /etc/sysctl.d/local.conf со строкой vm.swappiness=5 и применим изменения:

$ sudo sysctl -p  --load /etc/sysctl.d/local.conf

Проверим текущее значение снова:

$ cat /proc/sys/vm/swappiness    
5
$ sysctl -a | grep swappiness
vm.swappiness = 5

При нагрузке на систему следует обратить внимание на параметр swout в atop и на то, как долго висит большое значение в swout. Посмотрим с интервалом в 1 секунду:

$ atop aA 1

man atop: If the number of pages swapped out (‘swout’ in the PAG-line) is larger than 10 per second, the memory resource is considered ‘critical’. A value of at least 1 per second is considered ‘almost critical’.
PAG: swin - количество загруженных страниц памяти из дискового кеша
PAG: swout - количество выгруженных страниц памяти на дисковый кеш