Сегодня заметил, что нашел такую вещь:
Как видите, оперативная память почти наполовину свободна, а пространство подкачки используется очень высоко. Исходя из моих школьных знаний, я привык думать, что ОС Linux пытается наилучшим образом использовать оперативную память, и когда ей не хватает ОЗУ, она перемещает некоторые из наименее используемых страниц из ОЗУ в пространство подкачки.
Может ли кто-нибудь объяснить мне, если мои теоретические знания неверны, и объяснить мне, как в мире Linux это действительно работает.
Хотя верно то, что ядро использует подкачку, даже если память может быть оставлена, использование более двух третей ее может быть индикатором того, что исторически на сервере могла быть нехватка памяти, и именно поэтому он начал подкачку. Я бы связал использование подкачки с использованием памяти в отчетах sar, чтобы определить, достаточно ли оперативной памяти в системе. Я бы также проверил dmesg или журналы, чтобы определить, действительно ли на сервере закончилась память, и сработал oom-killer.
Ядро Linux начинает выгружать страницы памяти, даже если у вас много свободной оперативной памяти. Вы можете точно настроить это поведение, установив настраиваемую подкачку.
http://en.wikipedia.org/wiki/Swappiness
Для серверов я бы рекомендовал установить swappiness на 1, если у вас всегда достаточно памяти для вашей рабочей нагрузки. Для рабочих станций я бы рекомендовал использовать значение по умолчанию 60.
# check the current value
cat /proc/sys/vm/swappiness
60
# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness
# or use sysctl
sysctl -w vm.swappiness=1
Сделайте настройку постоянной в /etc/sysctl.conf, установив
vm.swappiness=1
и перезагрузите его
sysctl -w
Некоторые приложения, к сожалению, забивают своп напрямую, намеренно пропуская оперативную память. Глядя на тебя, Хром (и в какой-то момент Фотошоп). Единственный способ запретить замену этих приложений - запустить их без раздела подкачки. Даже swappiness 0 IIRC все равно предоставит им доступ, поскольку они явно этого требуют.
Однако изменение подкачки, как указано выше, будет работать для всего остального. Я бы предложил значение 10-20 вместо 1.