Как очистить подкачку, если есть свободная оперативная память?

Когда я открываю приложение с интенсивным использованием оперативной памяти (VirtualBox установлен на 2 ГБ оперативной памяти), обычно используется некоторое пространство подкачки, в зависимости от того, что еще у меня открыто в данный момент.

Однако, когда я выхожу из этого последнего приложения, освобождается 2 ГБ оперативной памяти, но остается то же использование пространства подкачки.

Например, прямо сейчас, примерно через два часа после закрытия VirtualBox, у меня есть 1,6 ГБ свободной оперативной памяти и все еще 770 МБ подкачки.

Как я могу сказать Ubuntu прекратить использовать эту подкачку и вернуться к использованию оперативной памяти?

Ядро Linux, лежащее в основе Ubuntu, автоматически "переключает" эти страницы с диска в оперативную память по мере необходимости, так что в целом я бы сказал, просто позвольте этому произойти естественным образом.

Однако, если вы действительно чувствуете, что вам нужно принудительно это сделать (я вижу сценарий, в котором вы хотели бы знать, что система будет реагировать позже), вы можете на мгновение отключить и повторно включить swap

sudo swapoff -asudo swapon -a

ИЛИ, альтернативно, в виде одной строки

sudo swapoff -a; sudo swapon -a

Будьте осторожны, делая это, так как вы можете сделать вашу систему нестабильной, особенно если у нее уже мало оперативной памяти.

Просто потому, что swap выделен, это не значит, что он "используется". В то время как такие программы, как system monitor и top, покажут, что часть вашего пространства подкачки выделена (в вашем примере 770 МБ), это не означает, что система активно переключается между входами и выходами.

Чтобы узнать, происходит ли замена чего-либо внутри / снаружи, вы можете использовать vmstat команда. Оставьте его включенным на несколько секунд, чтобы успокоиться и понаблюдать за si (обмен) и so (замена) столбцов. Если ничего не происходит, то нет причин для беспокойства.

Вот результат выполнения vmstat 1, где вы можете видеть, что моя машина вообще не меняется местами.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

И все же здесь, в top вы можете видеть, что у меня выделено место для подкачки:-

Mem:    475236k total,   245076k used,   230160k free,     9720k buffersSwap:   491512k total,    78588k used,   412924k free,    72476k cached

Вы также можете установить значение "swappiness" по умолчанию, равное 60, таким образом, своп с самого начала не будет таким большим. Почему значение по умолчанию для доставки равно 60, когда рекомендуемое значение равно 10, меня озадачивает. Из базы данных Ubuntu SwapFAQ:

Значение по умолчанию в Ubuntu - swappiness=60. Уменьшение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной настольной установки Ubuntu. Рекомендуется значение swappiness=10, но не стесняйтесь экспериментировать.

Изменив это значение на 10 или даже 0, вы можете значительно и ощутимо повысить скорость работы старой системы с медленным приводом. Установка этого значения в 0 не отключает swap для ядра Linux 3.4 и ниже, но с 3.5 + это происходит, поэтому вы захотите использовать значение 1, если хотите сохранить его на самом низком уровне *.

Я не вижу причин не устанавливать это значение равным 0, поскольку все, что попадает на диск, работает медленнее, чем оперативная память. У меня есть 8 виртуальных ядер, быстрый SSD и 8 ГБ памяти, а моя подкачка установлена на 0. На данный момент у меня запущено 3 виртуальные машины, мое использование памяти составляет 7,1 из 7,7 ГБ, моя используемая подкачка составляет всего 576 КБ из 952 МБ, и все системы работают без сбоев!

Из базы данных Ubuntu SwapFAQ:

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

  1. возможность замены может иметь значение от 0 до 100
  2. swappiness=0 указывает ядру избегать подкачки процессов из физической памяти как можно дольше
  3. swappiness=100 указывает ядру на агрессивную замену процессов из физической памяти и перемещение их в кэш подкачки

Ниже приведены основные инструкции по проверке подкачки, очистке вашей подкачки и изменению подкачки на 0:

Чтобы проверить значение подкачки:

cat /proc/sys/vm/swappiness

Чтобы временно установить swap на 0 (как было предложено SpamapS):

Это очистит вашу подкачку и перенесет всю подкачку обратно в память. Сначала убедитесь, что у вас достаточно доступной памяти, просмотрев вкладку ресурсов gnome-system-monitor, ваша свободная память должна быть больше, чем используемая вами подкачка. Этот процесс может занять некоторое время, используйте gnome-system-monitor для отслеживания и проверки прогресса.

sudo swapoff --all

Чтобы установить новое значение равным 0:

sudo sysctl vm.swappiness=0 

Чтобы снова включить swap:

sudo swapon --all

Чтобы навсегда установить swappiness равным 0:

  1. sudoedit /etc/sysctl.conf
  2. Добавьте эту строку vm.swappiness = 0
  3. sudo shutdown -r now # перезагрузить систему

* В версии ядра 3.5+ установка swappiness на 0 полностью отключает его, и рекомендуется установить значение 1, если вы хотите использовать алгоритм с наименьшей подкачкой. источник: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

Я обнаружил, что очистка подкачки может очень помочь в системах с медленными дисками и ограниченной оперативной памятью. Конечно, как уже упоминалось, способ сделать это - запустить sudo swapoff -a; sudo swapon -a. Проблема здесь в том, что если оперативной памяти недостаточно, это вызовет всевозможные проблемы.

Я написал сценарий, который я называю toggle_swap это работало на меня в течение последних нескольких лет. Он проверяет наличие достаточного количества свободной оперативной памяти, прежде чем фактически отключить подкачку. Вот он:

#!/bin/bashfree_data="$(free)"mem_data="$(echo "$free_data" | grep 'Mem:')"free_mem="$(echo "$mem_data" | awk '{print $4}')"buffers="$(echo "$mem_data" | awk '{print $6}')"cache="$(echo "$mem_data" | awk '{print $7}')"total_free=$((free_mem + buffers + cache))used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"if [[ $used_swap -eq 0 ]]; then    echo "Congratulations! No swap is in use."elif [[ $used_swap -lt $total_free ]]; then    echo "Freeing swap..."    sudo swapoff -a    sudo swapon -aelse    echo "Not enough free memory. Exiting."    exit 1fi

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

Если у вас нет действительно веской причины для того, чтобы вернуть этот диск, я бы оставил его в покое.

Это не влияет на производительность, если ваше пространство подкачки занято. Единственное снижение производительности заключается в том, что материал поступает / выходит из swap. Если ничего не заменяется / не заменяется, то вам не нужно ни о чем беспокоиться.

Большое предположение, что повторное заполнение всего содержимого на вашем компьютере занимает меньше времени, чем это.

Ubuntu 16.04, по крайней мере, может продолжать использовать swap еще долго после того, как это было необходимо, что делает вашу систему на порядки медленнее, полагаясь на файл подкачки, хотя в этом больше нет необходимости. Таким образом, ручное вмешательство может быть полезным. Перезагрузка - это не всегда вариант.

Самое простое ** перезагрузить устройство ** и сэкономить время на загрузку оперативной памяти и освободить оперативную память, сэкономить мощность ноутбука и температуру процессора