При заказе виртуального сервера, часто для установки используется заранее подготовленные шаблоны, из-за чего в системе может отсутствовать SWAP-раздел. Что бы предотвратить ошибки вызванные переполнением RAM и обеспечит нормальное функционирование системы в будущем, необходимо добавить в систему дополнительное SWAP-пространство.
Как правило, в процессе установки под SWAP выделяют отдельный раздел на диске, но начиная с версии ядра Linux 2.6 работа SWAP-файла не уступает по производительности SWAP-разделу. Поэтому, в большинстве случаев я предпочитаю использовать SWAP-файл размещенный в корневом разделе диска. Это добавляет гибкости для обслуживания системы в будущем: я в любой момент с легкостью могу уменьшить или увеличить размер файла, при необходимости перенести на другой раздел или полностью удалить.
Ниже приведен пример скрипта для быстрой настройки SWAP:
if [ -f /swapfile ]; then
echo "Swapfile already exists?"
exit 1
fi
dd if=/dev/zero of=/swapfile bs=1G count=2
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50
echo "/swapfile none swap sw 0 0" >> /etc/fstab
echo vm.swappiness=10 >> /etc/sysctl.conf
echo vm.vfs_cache_pressure=50 >> /etc/sysctl.conf
Параметр vm.swappiness указывает системе при каком минимальном проценте свободной памяти необходимо задействовать SWAP. Значение параметра может быть в пределах от 0 — 100. Но для улучшения производительности лучше установит значение данного параметра равным 10.
В случае использования SSD, необходимо уменьшит размер дискового кэша, для этого рекомендуется установить значение параметра vm.vfs_cache_pressure равным 50.
Иногда может возникнуть необходимость очистить SWAP без перезагрузки системы, для этого используем следующую команду:
swapoff -a && swapon -a
Для принудительной очистки системных кэшей используем команду:
sync # Чистим pagecache: echo 1 > /proc/sys/vm/drop_caches # Чистим dentrie и inode кэши: echo 2 > /proc/sys/vm/drop_caches # Чистим pagecache, dentrie и inode кэши: echo 3 > /proc/sys/vm/drop_caches
Как правило, я старюсь перегружать сервер только при крайней необходимости. Одна из причин, по которой я люблю Linux — если не течет память, то система абсолютно не нуждается в перезагрузке. Исключительно в целях профилактики чтобы очистить кеши и SWAP, на всех своих серверах в cron добавляю следующую команду:
0 0 * * * swapoff -a && swapon -a && sync && echo 3 > /proc/sys/vm/drop_caches