У меня есть Linux-бокс, который используется как хранилище SAN. Он оснащен 14 жесткими дисками SATA, и единственное программное обеспечение, которое он запускает, - iscsi target и zabbix agent. Это физическая коробка, а не виртуальная машина.
Установленный размер ОЗУ составляет 128 ГБ, подкачка составляла 4 ГБ, и никто никогда не заботился о ее размере, когда ОЗУ довольно велико, но по мере запуска коробки (время безотказной работы 694 дня) своп использовался все больше и больше, и теперь он использовался на ~ 80%.
Htop не покажет ничего плохого, похоже, ОС использует оперативную память в качестве кеша и т. Д. swappiness
был установлен на 10, затем на 1, ничего не помогло. Конечно, я могу полностью отключить своп, но похоже, что это будет плохой ход.
Итак, мой вопрос прост: как я могу настроить блок на использование ОЗУ, а не на подкачку, и почему он вообще использует подкачку, когда ОЗУ достаточно?
Это SAN, поэтому он обслуживает блоки, а не файлы, поэтому кеширование может быть выполнено на блочной основе, и его можно легко уменьшить, если объем оперативной памяти ограничен, в любом случае это не повлияет на логику iSCSI.
Zabbix говорит, что сейчас у меня есть доступная RAM = 123,22 ГБ (эй, почти все 128 ГБ!), Используемый swap составляет 3,24 ГБ из 4 ГБ.
Нет проблем. Даже если есть доступная оперативная память, ядро Linux переместит страницы памяти, которые почти никогда не используются, в пространство подкачки.
Полезно заменять страницы памяти, которые некоторое время были неактивными, сохраняя часто используемые данные в кеше; это желаемая ситуация ядра.
Вы можете больше контролировать это, используя vfs_cache_pressure
(который контролирует тенденцию ядра освобождать память, которая используется для кэширования объектов каталога и inode) и swappiness
(который контролирует, насколько агрессивно ядро будет менять страницы памяти: более высокие значения увеличивают агрессивность, более низкие значения уменьшают объем подкачки).
Вы можете найти эти настройки в /etc/sysctl.conf
.