Файл подкачки: swap-файл и swap-раздел в Linux

Источник: http://mydebianblog.blogspot.ru/2010/05/swap-swap-linux.html

 

Все мы знаем, что swap-файлы в Linux делаются просто и легко – настолько просто, что иногда забываем, как это делается. Прежде, чем что-то создавать, хорошо бы узнать, сколько swap-пространства у нас уже имеется в системе – для этого следует дать команду в консоли от рута:

# swapon -s

Результат будет в виде:

Filename Type Size Used Priority
/dev/hda1 partition 289128 0 -1

Описание вывода команды:

  • Filename описывает имеющиеся у вас своп-пространства и где они находятся.
  • Type указывает тип пространства: partition (раздел) или file (файл).
  • Size сообщает общий размер Swap-пространств.
  • Used говорит о том, сколько сейчас свопа задействовано.
  • Priority указан приоритет, т.е. какие пространства системе использовать вначале.

Тот же самый результат мы получим по команде cat /proc/swaps

Создание swap-файла в Linux
1. Открываем консоль\терминал и получаем полномочия root или используем sudo:

$ su

2. Думаем*, какой размер swap-файла нам нужен в мегабайтах. Подумавши, даём команду:

sudo dd if=/dev/zero of=/swapfile bs=1M count=500

или

# dd if=/dev/zero of=/swapfile bs=1M count=500

В команде dd для задания размеров можно использовать суффиксы K, M, G для килобайт, мегабайт и гигабайт соответственно. В данном примере это 500 Mегабайт файла подкачки.

* Многие задаются фундаментальными вопросами бытия вроде “каков рекомендуемый размер swap в linux”? Можно не думать, а просто создать SWAP-файл по размеру оперативной памяти, периодически посматривая на её, подкачки, использование с помощью команды top. При необходимости добавить\уменьшить своппинг системе. Можно использовать несколько файлов подкачки.

3. Поясняем системе, что созданный пустой файл это всё-таки файл подкачки для Linux:

sudo mkswap /swapfile

или

# mkswap /swapfile

4. Подключаем созданный swap-файл:

sudo swapon /swapfile

или

# swapon /swapfile

При этом в выводе команды top или команды free должно появиться упоминание, что свопинга в системе поприбавилось. Чтобы отключить файл подкачки, пишем

sudo swapoff /swapfile

или

# swapoff /swapfile

Чтобы не подключать swap-файл или swap-раздел каждый раз, полезно занести запись в /etc/fstab следующего содержания:

/swapfile none swap sw 0 0

На всякий случай отмечу, что каждый раз создавать swap-файл не нужно: просто подключаете и отключаете его с помощью swapon/swapoff. Работа со swap-разделами в Linux происходит аналогичным образом.

Приоритет SWAP-файлов
Создавать и использовать swap-файлов в Linux можно любое количество. При этом можно указать приоритет подключаемого swap-файла или раздела (хотя ядро умеет самостоятельно распределять по разделам/файлам подкачки).

Например, высший приоритет для файла подкачки задаётся так:

swapon -p 1 /opt/swapfile

Приоритет является целым числом от 0 до 32767.

Очистка swap-пространства после ресурсоёмких приложений
Командой swapoff -a, запущенной от имени root, можно отключить использование всех разделов и файлов подкачки. После ввода команды содержимое свопа за несколько минут загружается обратно в оперативную память, а сам раздел подкачки отключается.
После загрузки содержимого свопа в оперативную память включем своп обратно командой swapon -a.

2. Системные настройки использования своппинга – Linux
За интенсивность обращения системы к swap-файлам и swap-разделам отвечает параметр swappiness, равный по умолчанию 60. Значение параметра может быть в пределах от 0 – наименьшее использование подкачки, до 100 – подкачка используется часто.

Насчёт оптимального значения параметра swappiness есть много разных мнений. Так, например, один из ведущих разработчиков ядра Эндрю Мортон считает, что для десктопа лучше ставить большое значение, чтобы всякое bloatware скинуть в своп и использовать оперативную память для чего-то нужного.
Чрезмерное значение здесь приведёт к интенсивному использованию swap-файла, что нежелательно. Слишком маленькое значение может привести к тому, что при заполнении памяти будет принудительно запущен OOMkiller (процесс, запускающийся при исчерпании памяти и убивающий наиболее ресурсоёмкие задачи).

Временно (до перезагрузки системы) изменить этот параметр можно с помощью команды:

echo 50 > /proc/sys/vm/swappiness

Чтобы изменить значение по умолчанию, необходимо изменить параметр vm.swappiness:

vm.swappiness=50

в файле /etc/sysctl.conf

Следует, впрочем, отметить, что со vm.swappiness сильно перегибать палку не стоит. При больших значениях система потеряет в отзывчивости (будет вытеснять память, с которой работают приложения, в своп, хотя оперативной памяти ещё много). При малых значениях система работает отзывчивей, но когда оперативная память заканчивается, система начинает активно свопиться и притормаживать.

Также можно попробовать увеличить\уменьшить объём потребляемой системой памяти за счёт изменения размеров дискового кеша. Уровень выделяемой под кеш памяти хранится в
/proc/sys/vm/vfs_cache_pressure
Значение по умолчанию: 100. Чтобы использовать меньше памяти под дисковые кеши (что вообще говоря не есть хорошая идея), ставим значение 50. Если, наоборот, хочется больше отзывчивости системы, увеличиваем размер кеша не скупясь:

echo 1000 > /proc/sys/vm/vfs_cache_pressure

и далее продолжаем играться с параметрами вплоть до полного удовлетворения. Для того, чтобы настройки стали постоянными, заносим параметр

vm.vfs_cache_pressure = 1000

в файл /etc/sysctl.conf и со следующей загрузки дисковые кеши будут смачно чавкать вашей оперативной памятью.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *