Очистка swap-памяти в Ubuntu и параметр swappiness
Сегодня возникло желание очистить swap-память на своей рабочей Ubuntu 9.10. Точнее сказать - переместить память из swap-раздела в оперативную память. Когда-то уже делал подобное с помощью команды swapoff -a которая отключает все смонтированные swap-разделы, а перед этим перемещает страницы памяти в ОЗУ. Но сегодня решил посмотреть может есть другой способ - другая команда, которая позволяет очистить своп. Прочитав FAQ от Ubuntu на тему swap-памяти, хочу остановиться на нескольких моментах.
В разделе Empty Swap был предложен скрипт который позволяет “to get the swap manually back into RAM”, то есть делает как раз то, что мне нужно - выгружает данные из swap-памяти в оперативную память. Скрипт всего в несколько строчек:
1 2 3 4 5 6 | err="not enough RAM to write swap back, nothing done" mem=`free|grep Mem:|awk '{print $4}'` swap=`free|grep Swap:|awk '{print $3}'` test $mem -lt $swap && echo -e $err && exit 1 swapoff -a && swapon -a && exit 0 |
Но на самом деле в нем нет необходимости (для меня), так как использует он все те же команды swapoff -a и swapon -a. То есть получается никакой специальной программы для выгрузки swap-файла нет. По крайней мере на сайте Ubuntu рекомендуют использовать именно swapoff и swapon.
Таким образом для того чтобы выгрузить данные из swap-памяти достаточно выполнить команды:
1 | $ sudo swapoff -a && sudo swapon -a |
и дождаться пока данные будут выгружены. В зависимости от количества данных и производительности компьютера, процедура может занять до нескольких минут.
Также хочу несколько слов написать о параметре swappiness, который управляет интенсивностью перемещения данных из ОЗУ в swap-память. Этот параметр может принимать значения от 0 до 100. Если параметр установлен в 0, то ядро будет пытаться не использовать swap-память насколько это возможно, если swappiness=100, то наоборот ядро будет с максимально возможной интенсивностью использовать swap-память.
По умолчанию, в Ubuntu, этот параметр установлен в 60. Это можно увидеть выполнив команду:
1 | cat /proc/sys/vm/swappiness |
Если у вас достаточно оперативной памяти и вы хотите чтобы swap-память использовалась только в случае крайней необходимости, то можно установить swappiness в 0. Для текущего сеанса командой:
1 | sudo sysctl vm.swappiness=10 |
Но после перезагрузки параметр вновь будет установлен в 60. Чтобы установить новое значение в качестве постоянного, нужно открыть файл /etc/sysctl.conf, найти строку vm.swappiness=60 и изменить значение. Если данной строки не будет значит нужно дописать ее в конце файла:
1 | vm.swappiness=0 |
“Поигравшись” с параметром swappiness можно подобрать тот вариант при котором работа в системе будет более комфортной. Для каждого это конечно же будет индивидуально.
Для тех кто понимает технический английский, рекомендую также прочесть интересную переписку по поводу использования разных значений параметра swappiness на сайте http://kerneltrap.org/.
Юрий:
Спасибо. Описано лаконично, понятно и доходчиво.
Ответить
Igorka Reply:
ноября 2, 2010 at 10:59
И вам спасибо, что отписались
Ответить
Andrew:
после сделаного действия увидел значительную нестабильность в запуске ubuntu. не советую менять конфиги! я не думаю, что создатели оси ошиблись в значении “60″
Ответить
Igorka Reply:
апреля 26, 2011 at 7:38
После какого именно “сделанного действия”? И в чем заключается нестабильность?
И где написано что создатели оси ошиблись?
Ответить
Andrew:
открывал файл /etc/sysctl.conf,не нашёл строку vm.swappiness=60, следовательно дописал в конце файла
vm.swappiness=10. действительно система начала использовать 85% оперативной памяти, и затем… секунду повисев (ЧЕГО РАНЬШЕ НЕ БЫЛО), начала использовать swap. время загрузки системы увеличилось на 10-15 сек., система периодически начинала использовать после каждой перезагрузки не 26% оперативки,а 45% + происходила частая проверка файловой системы(что бывало только после аварийного выключения). ноут ACER Extensa 5620 z(1gb RAM), Ubuntu 9.10 KARMIC KOALA
Ответить
remarkes Reply:
декабря 29, 2011 at 14:27
а на голове выпали волосы ))
малый swappiness надо делать тогда, когда памяти много.
Ответить