Как вы помните, не так давно мы рассматривали вопрос очистки оперативной памяти в случае, когда она через чур забита дисковым кэшем. Сегодня мы продолжаем урок уличной магии... издевательства над системой... работы с памятью, но на этот раз уделим внимание не столько ей, сколько всеми нами горячо любимому свопу.
Обычно рано или поздно у всех возникает вопрос: "А какого черта у меня начинает заполняться своп, когда у меня еще свободной оперативной памяти как грязи?". И вот тут нам приходит в помощm такой параметр, как vm.swappiness. Для начала в консоли выполним команду:
cat /proc/sys/vm/swappiness
Поумолчанию результат будет 60.
Вы, конечно же спросите: "И что это означает?". Отвечаю: это параметр, который контролирует количество свободной памяти, который контролирует, при какой загруженности у нас начнется сброс страниц в swap. Ну а дальше простая формула: 100%-60%=40%, т.е. уже при 40% загруженой ОЗУ данные начинают активно сливаться на жетский диск, что, как мне кажется, не есть хорошо. И вероятнее всего вы спросите, нельзя ли сделать так, чтобы слив начался хотя бы при 90% занятой памяти. И я вам отвечу: да, можно. Сначала в конфиг /etc/sysctl.conf добавим запись:
vm.swappiness=10
Затем, дабы не перезагружать комп, выполним с правами суперпользователя команду:
sysctl -p
Теперь параметр оперативная память будет выгружаться в своп при достижении 90% занятости.
А сейчас мы снова вернемся к теме, рассмотреной в прошлый раз - к дисковому кэшу. То, о чем пойдет речь дальше, делайте на свой страх и риск, я за последствия нести ответственность отказываюсь. =)
Существует такой параметр, как vfs_cache_pressure. Этот параметр определяет, на сколько ваша операционная система готова держать кэши в оперативной памяти или же сливать их своп. Посмотреть значение можно такой командой:
cat /proc/sys/vm/vfs_cache_pressure
Параметры vm.vfs_cache_pressure:
- 0 — не кэшировать ничего.
- 100 — значение по-умолчанию.
- >100 — агрессивно кэшировать дисковые операции.
Знатоки рекомендуют устанавливать значение 1000 и больше для обычных винчестеров и около 50 для SSD дисков. Чем выше значение vm.vfs_cache_pressure тем отзывчивей будет система (тем больше будет кэширование), но это при условии что у Вас достаточно оперативной памяти (более 2Гб).
Если кому-то будет интересно на практике определить, какое значение ему лучше подходит, то рекомендую ознакомиться с этой буржуйской статьей.
Если вы остановились в выборе на каком-то определенном значении, то впишем его туда же, куда раньше мы прописывали параметр vm.swappiness - в конфиг /etc/sysctl.conf:
vm.vfs_cache_pressure=1000
Ну и чтобы значения вступили в силу, выполним с правами суперпользователя команду:
sysctl -p
.
На этом тюнинг можно считать законченым. Но у вас наверняка может возникнуть вопрос: "У меня дофига свободной оперативы, но при этом в свопе что-то лежит, а я хочу его освободить. Как мне очистить своп?" И на этот вопрос есть ответ.
Для начала убедитесь, что содержимое свопа не превышает размер свободной оперативной памяти. Если свободной памяти больше, чем свопа, то на какое-то время своп просто отключаем командой:
swapoff -a
После чего дожидаемся, когда содержимое свопа перельется в оперативную память. Обязательно промониторьте это дело любой предпочитаемой вами утилитой (виджетом, командой free, командой top/htop или что вам больше по душе). Когда из свопа все перелилось, снова его включаем:
swapon -a
На этом мы и закончим наш урок. Наслаждайтесь!
http://kubuntu.ru/node/13153