Содержание
- 1 Размещение
- 2 Безопасность
- 3 Размер
- 4 Создание SWAP на разделе диска
- 5 SWAP с динамически изменяемым размером
- 6 Hibernate (suspend to disk, гибернация)
- 7 Параметр vm.swappiness
- 8 Смотрите также
- 9 Ссылки
- 10 Добавляем файл подкачки (SWAP) на Ubuntu
- 11 SWAP и перезагрузка
- 12 Улучшаем работу файла подкачки (SWAP) Ubuntu
- 13 Что такое SWAP
- 14 Когда может понадобиться своп
- 15 Преимущества SWAP
- 16 Недостатки SWAP
- 17 Как создать и подключить файл подкачки SWAP
- 18 Дополнительные вопросы
SWAP – один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище (отдельный раздел или файл), освобождая ОЗУ для загрузки других активных фрагментов памяти.
Более подробно о механизме своппинга можно прочитать в Википедии.
Дополнительно SWAP используется при организации режима сна (hibernation или suspend to disk). При этом в SWAP сохраняется образ оперативной памяти.
Размещение
SWAP может быть размещен на разделе диска, в файле или в RAM. Исторически в Linux SWAP размещался на разделе, но в современных дистрибутивах производительность SWAP-файла не уступает SWAP-разделу. Однако стандартный установщик Ubuntu (до версии 17.04) не умеет создавать SWAP-файл при установке и выдает предупреждение, если SWAP-раздел не определен при разметке диска. Начиная с версии 17.04, Ubuntu предлагает по умолчанию создавать SWAP в файле (объем определяется как 5% от свободного на диске места, но не более 2 Гб). Использование SWAP-файла имеет некоторые преимущества: он не занимает отдельный раздел, его легко создать, изменить его размер или удалить.
Дополнительно при выборе размещения SWAP нужно учитывать, что не все файловые системы позволяют использовать прямую адресацию блоков SWAP-файла. Так, к примеру, нельзя использовать SWAP в файле на разделе с файловой системой btrfs(по состоянию на середину 2017).
Безопасность
При работе с секретными/зашифрованными данными часть этих данных в процессе работы либо при гибернации может оказаться в SWAP в расшифрованном виде. В таких случаях рекомендуется шифровать не только данные, но и сам SWAP. Однако нужно учитывать, что у режима сна при шифровании SWAP могут возникнуть сложности.
Размер
В Интернете можно найти множество рекомендаций по определению размера SWAP, однако универсального ответа не существует.
При определении размера SWAP следует учесть следующие аспекты:
- Каков размер оперативной памяти?
- Какие приложения будут использоваться?
- Будет ли вестись работа с секретными данными?
- Нужен ли режим сна (suspend to disk)?
В зависимости от ответов на эти вопросы рекомендации по размеру SWAP будут значительно различаться.
При работе с секретными (зашифрованными) данными стоит либо шифровать SWAP, либо рассмотреть вариант с отказом от SWAP вовсе (зависит от размера оперативной памяти). Стоит также рассмотреть вариант с шифрованием всего диска.
Создание SWAP на разделе диска
Разобравшись с требованиями к SWAP, можно приступить к его созданию или изменению. Ядро Linux может работать с несколькими частями SWAP. Поэтому если вы решили, что созданного при установке системы SWAP-раздела недостаточно, то стоит создать дополнительный SWAP (выделить место под раздел или файл). Однако нужно учитывать, что для гибернации нужен непрерывный блок SWAP, который должен иметь размер больший, чем оперативная память. К примеру, у нас есть раздел /dev/sdc2 (ваше имя раздела может отличаться). Создадим на нем необходимую структуру данных для работы SWAP:
sudo mkswap /dev/sdc2
sudo swapon /dev/sdc2
Проверить результат можно, посмотрев на вывод команды
sudo swapon -s
Сделаем автомонтирование SWAP-раздела при запуске системы. Узнаем UUID раздела:
sudo blkid
Теперь пропишем строку в /etc/fstab
echo"UUID= swap swap defaults,pri=<Приоритет (от 0 до 32767)> 0 0"|sudotee-a/etc/fstab
SWAP с динамически изменяемым размером
Если вы не хотите думать об объеме SWAP, имеет смысл воспользоваться утилитой swapspace (динамический менеджер подкачки). Эта утилита работает в фоновом режиме и динамически управляет подкачкой. При необходимости swapspace автоматически создаёт дополнительные файлы подкачки требуемого размера. Неиспользуемые файлы подкачки удаляются и не занимают место. Однако, если вы работаете с секретными документами, не забудьте указать swapspace создавать SWAP-файлы на зашифрованном диске или внутри шифрованного контейнера 1).
Hibernate (suspend to disk, гибернация)
О настройке режима гибернации можно прочитать здесь.
Параметр vm.swappiness
Основной параметр, влияющий на работу системы со swap, — это vm.swappiness. Очень приблизительно этот параметр можно определить так: он задает процент свободной оперативной памяти, при котором начинается использование подкачки. Более точное определение смысла этой переменной можно уяснить из описания которое было дано в рассылке kernel.org — статья на английском. Без особой необходимости трогать его не рекомендуется.
Скорректировать значение, применяемое при загрузке системы, можно, указав в файле /etc/sysctl.conf значение vm.swappiness. Пример:
echo"vm.swappiness=30"|sudotee-a/etc/sysctl.conf
Мгновенно применить эту настройку можно с помощью следующей команды:
# sysctl -f
Актуальное значение, используемое ядром в настоящее время, можно просмотреть или изменить в /proc/sys/vm/swappiness.
# cat /proc/sys/vm/swappiness# echo 10 > /proc/sys/vm/swappiness
Изменения в /proc/sys/vm/swappiness будут сброшены при следующей перезагрузке.
Значение vm.swappiness по умолчанию — 60.
Какое значение выбрать?
Маленькое значение vm.swappiness (минимальное значение: 0) будет заставлять ядро использовать больше оперативной памяти под память процессов (в ущерб буферам и кэшам), тогда как большое значение (максимальное значение: 100) будет выделять больше памяти под кэши и буфера (в ущерб памяти для процессов).
Нужно понимать: ни одно значение vm.swappiness не увеличит волшебным образом производительность компьютера многократно. Урезаете кеши — понижаете отзывчивость системы при работе с файлами, урезаете память процессов — снижаете отзывчивость системы при переключении задач.
Нужное вам значение, скорее всего, стоит подбирать экспериментально.
Смотрите также
- Спящий режим
- Шифрование всего диска
Ссылки
- Описание Swapspace
- Описание механизма подкачки страниц на Википедии
1)swapspace создает SWAP-файлы без шифрования внутри файла Разместил DreamerKlim, 2017-12-09. Последнее изменение: 2018-01-28. / 2 комментария
Файл подкачки или SWAP (с англ. обмен) — это файл обеспечивающий механизм виртуализации памяти, при котором некорректный объем данных из оперативной памяти сохраняется на жестком диске (или SSD). В последующем будет происходить обмен данными между оперативной памятью и файлом подкачки.
Для чего нужен файл подкачки?
Если на вашем компьютере заканчивается оперативная память, то часть данных, содержащихся в ней, будет скинута в SWAP. Зачастую эти данные неактивны и их отсутствие в оперативной памяти не должно существенно влиять на производительность. Этот нехитрый механизм не дает оперативке полностью забиться и тем самым предупреждает тормоза, подвисание и даже прекращение работы различных программ.
Размер файла подкачки. Больше не всегда лучше
«Больше не всегда лучше» — это правило отлично описывает принцип выбора размера файла подкачки. В интернете можно найти много рекомендаций по выбору размера файла, но каково-то универсального ответа нет, все очень индивидуально и будет зависеть от:
- Размера оперативной памяти.
- Используемых приложений.
- Используется ли режим сна?
Для машин с маленькой оперативной памятью (до 2 гигабайт) рекомендовано создать SWAP примерно равный оперативке. Если на машине стоит от 2 гигабайта памяти, то файл подкачки разумно ставить 1/2 от оперативной памяти, но не превышая 4 гигабайт. Эти рекомендации подходят только для систем не использующих сон/гибернацию и не работающих с секретными данными. Если вы использует сон/гибернацию, то размер файла следует брать равный размеру оперативной памяти, если вы работает с секретными данными, то возможно, следует отказаться от такого файла. Советую следить иногда за нагрузкой на оперативную память и SWAP при полной забитости можно расширить файл подкачки или установить больше памяти.
Добавляем файл подкачки (SWAP) на Ubuntu
Открываем наш терминал или подключаемся к машине по ssh и убеждаемся в отсутствии SWAP:
sudo swapon --show или free -h
Убеждаемся в наличии свободного места на диске:
df -h
Создаем файл подкачки утилиту fallocate, где 1 это размер файла в гигобайтах:
sudo fallocate -l 1G /swapfile
Проверим действительно ли зарегистрирован файл:
ls -lh /swapfile
Позаботимся о безопасности файла:
chown root:root /swapfile chmod 0600 /swapfile ls -lh /swapfile
Такой нехитрый ход позволяет читать и записывать только пользователю root. Затем создаем swap пространство командой:
sudo mkswap /swapfile
Включаем файл командной:
sudo swapon /swapfile
Теперь файл подкачки подключен и работает. Убедиться в этом можно командами указаными выше.
Команды для отключения и проверки состояния отключения (если вы решите отказаться от файла или изменить его размер):
swapoff /swapfile swapon -s
SWAP и перезагрузка
После перезагрузки системы файл подкачки отваливается, а это нам совсем не надо. Чтобы предупредить эту проблему редактируем файл /etc/fstab:
nano /etc/fstab В конце добавить /swapfile none swap sw 0 0
Так же можно воспользоваться такой командой
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Теперь после перезагрузки системы SWAP никуда не пропадет и продолжит свою работу.
Улучшаем работу файла подкачки (SWAP) Ubuntu
Улучшать работу файла мы будем с помощью контроля использования пространства файла подкачки. Существует такой параметр, как «swappiness«, чем выше это значение тем больше система будет пытаться сохранить оперативной памяти и тем больше будет скидываться в файл подкачки, при значениях близких к 0 система не будет использовать SWAP без крайней необходимости.
По умолчанию swappiness 60%, а это значит что после того как оперативная память заполнится на 40%, Ubuntu будет пытаться скинуть «излишки» на жёсткий диск. Это не очень, особенно если у вас достаточно много памяти, снизив этот значение можно добиться повышения производительности. Понизим это значение до 20.
sudo sysctl vm.swappiness=20
Теперь файл подкачки будет задействован только после того, как будет использовано 80% оперативной памяти. Если система начала работать лучше и никаких нареканий не выбывает, то ставим это значение как постоянное, чтобы после перезагрузки значение не пришло к стандартному.
sudo sysctl -w vm.swappiness=20
Существует ещё один интересный параметр vfs_cache_pressure. Он указывает размер выделяемой памяти для кэширования операций на жёстком диске. По умолчанию значение 100, предельных значений я, к сожалению, не знаю. 0 — ничего не кэшировать. >100 — агрессивно кэшировать операции на жёстком диске. Тут предлагаю экспериментальным путём найти нужное значение.
Изменим параметр до 50:
echo 50> /proc/sys/vm/vfs_cache_pressure
Для работы после перезагрузки добавить в конце файла /etc/sysctl.conf такую строку:
vm.vfs_cache_pressure=50
Просмотр текущего значения:
cat /proc/sys/vm/vfs_cache_pressure
Подведём итоги: мы создали файл подкачки для Ubuntu, настроили его, защити, урегулировали отношения между оперативной памятью и SWAP. На этом все, умственно трудитесь и хорошо питайте.
ТвитнутьПоделиьсяОтправить
Что такое SWAP
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.
Когда может понадобиться своп
Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:
- Постоянное падение сайта:
Ошибка соединения с базой данных
— означает, например, что MySQL упал; - При внимательном изучении логов
/var/log/mysql.log
обнаруживается ошибкаInnoDB: Fatal error: cannot allocate memory for the buffer pool
. Она свидетельствует о том, что базе данных не хватает выделенной ей оперативной памяти для создания буфера.
При подобных симптомах и ошибках может помочь своппинг.
Преимущества SWAP
- Экономия бюджета
Сравнение стоимости оперативной памяти и SSD | ||
(цены актуальны на 7 июля 2017 года) | IHOR | FirstVDS |
Оперативная память, в среднем за 1 гигабайт | 100 рублей в месяц | 170 рублей в месяц |
SSD, в среднем за 1 гигабайт | 10 рублей в месяц | 13 рублей в месяц |
Как видно из таблицы, экономия выйдет примерно в 10 раз.
Недостатки SWAP
- Медленная работа
SWAP — это не замена оперативной памяти, а всего лишь его поддержка.
Необходимо наличие свободного места на диске</dt>Вам необходимо зарезервировать свободное место на диске под своп, иначе стабильность работы не гарантируется. Это не то, чтобы недостаток свопа, просто его надо учитывать и помнить о нём.</dd>
</dl>
Как создать и подключить файл подкачки SWAP
Далее, в работе используется командная строка SSH. Инструментарий: Far Manager или Putty. Для примера приводятся команды из под
root
. Если Вы работаете не подroot
, перед командами задавайте префиксsudo
Проверка наличия свопа в системе
Для начала, нужно убедиться, что своп ещё не подключен:
swapon -s
Если команда выдала пустой результат или что-то навроде:
Filename Type Size Used Priority
— значит, своп, скорее всего отсутствует.
Дополнительно проверим командой:
free -m
Если в таблице в строке swap стоит 0, значит своп отсутствует.
Проверка наличия свободного места на диске
Теперь, надо проверить, сколько свободного места есть на диске:
df -h
В результате, мы увидим что-то подобное:
[email protected]:~# df -h Файловая система Размер Использовано Дост Использовано% Cмонтировано в /dev/vda1 30G 20G 9,0G 66% / udev 10M 0 10M 0% /dev tmpfs 403M 41M 362M 11% /run tmpfs 1006M 336K 1005M 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 1006M 0 1006M 0% /sys/fs/cgroup tmpfs 1006M 492K 1005M 1% /tmp
Как мы видим, доступно 9 гигабайт дискового пространства — вполне достаточно, чтобы создать своп-файл.
Какого размера создать swap
Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.
Создание файла SWAP
- Быстрый способ
- Используем
fallocate
:fallocate -l 4G /swapfile
Результатом будет пустая строка, это нормально. В отличие от
dd
, результат будет получен почти сразу, и я рекомендую именно его.</pre>
- Традиционный, медленный способ
dd if=/dev/zero of=/swapfile bs=1G count=4
Синтаксис команды простой:
</pre>
- dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
- if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
- of=/swapfile — указывает путь назначения, куда копируем данные;
- bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения:
G
— гигабайт,M
— мегабайт,K
— килобайт, и так далее; - count=4 — сколько блоков размером с
bs
будет создано, в нашем случае 4.
Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для
of=
(куда сохранять файл), можно повредить данные на диске.
</ul></dl>
Теперь, когда файл создан, проверим результат:
ls -lh /swapfile
В результате увидим:-rw-r--r-- 1 root root 4.0G Jul 07 16:16 /swapfile
Как видим, файл создался верно и с нужным объёмом.
Как подключить SWAP файл
Для начала, ограничим права доступа к вновь созданному файлу.
Предоставление другим пользователям возможности читать или писать в этот файл будет представлять собой огромный риск для безопасности, поэтому ограничение командой ниже строго обязательно:
chmod 600 /swapfile
Проверим результат:
ls -lh /swapfile
В результате, мы должны увидеть подобное:-rw------- 1 root root 4.0G Jul 07 16:16 /swapfile
Права прописаны верно.
Теперь нужно сделать из swapfile
файл подкачки:
mkswap /swapfile
В результате, увидим примерно следующее:Setting up swapspace version 1, size = 4193300 KiB no label, UUID=e5f3e9cf-c1a9-4ed4-b8ab-711b6a7d6544
Теперь, файл готов в роли свопа. Подключим его к системе:
swapon /swapfile
swapon: /swapfile: swapon failed: Operation not permittedЕсли на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера
от 100 рублей в месяц
и виртуализацияKVM
позволяют включать SWAP.
Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:
swapon -s
Filename Type Size Used Priority /swapfile file 4193300 0 -1
Своп также будет виден в стандартных командах:
free -m
total used free shared buffers cached Mem: 2010 1887 122 0 5 30 -/+ buffers/cache: 827 1183 Swap: 4095 0 4095
Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.
Добавление свопа в автозагрузку
Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab
:
echo "/swapfile none swap sw 0 0" >> /etc/fstab
nano /etc/fstab
Дополнительные вопросы
Как очистить SWAP в Linux
Вообще, это делается с помощью отключения и включения свопа.
swapoff -a && sleep 3 && swapon -a
Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.
Используемые источники:
- https://help.ubuntu.ru/wiki/swap
- https://pupi-boy.ru/web-server/nastrojka-fajl-podkachki-swap-v-ubuntu.html
- https://sheensay.ru/swap
</table></dl>