Как добавить пространство подкачки в Debian 8

Вступление

Одним из самых простых способов защиты от ошибок нехватки памяти в приложениях является добавление некоторого пространства подкачки на ваш сервер. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Debian 8.

Что такое своп?

Swap - это область на жестком диске, обозначенная как место, где операционная система может временно хранить данные, которые она больше не может хранить в оперативной памяти. По сути, это дает вам возможность увеличить объем информации, которую ваш сервер может хранить в своей рабочей «памяти», с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в ОЗУ больше нет места для хранения данных приложения.

Информация, записываемая на диск, будет значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет сохранить данные приложения в памяти и использовать подкачку для более старых данных. В целом, использование пространства подкачки в качестве запасного варианта, когда ОЗУ вашей системы истощается, может быть хорошей защитой от исключений нехватки памяти в системах с доступным хранилищем без SSD.

Шаг 1 - Проверка системы на наличие информации об обмене

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

Мы можем увидеть, имеет ли система какой-либо настроенный обмен, набрав:

sudo swapon --show

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

Вы можете проверить, что нет активного обмена, используя утилиту + free +:

free -h
Output             total       used       free     shared    buffers     cached
Mem:          1.0G       331M       668M       4.3M        11M       276M
-/+ buffers/cache:        44M       955M

Как вы можете видеть в строке вывода * Swap *, подкачка в системе не активна.

Шаг 2 - Проверка доступного пространства на разделе жесткого диска

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

df -h
OutputFilesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  946M   23G   4% /
udev             10M     0   10M   0% /dev
tmpfs           201M  4.3M  196M   3% /run
tmpfs           501M     0  501M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           501M     0  501M   0% /sys/fs/cgroup
tmpfs           101M     0  101M   0% /run/user/1001

Устройство с + / + в столбце + Установлено на + в данном случае является нашим диском. В этом примере у нас достаточно места (используется только 946M). Ваше использование, вероятно, будет другим.

Хотя существует множество мнений относительно подходящего размера пространства подкачки, оно действительно зависит от ваших личных предпочтений и требований вашего приложения. Как правило, объем, равный или удвоенный объем оперативной памяти в вашей системе, является хорошей отправной точкой. Другое хорошее практическое правило заключается в том, что что-либо более чем 4G подкачки, вероятно, не нужно, если вы просто используете его как запасной вариант ОЗУ.

Шаг 3 - Создание файла подкачки

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

Мы создадим файл с именем + swapfile + в нашем корневом каталоге (/). Файл должен выделять количество места, которое мы хотим для нашего файла подкачки. Есть два основных способа сделать это:

Традиционный, медленный путь

Традиционно мы создаем файл с предварительно выделенным пространством, используя команду + dd +. Эта универсальная дисковая утилита выполняет запись из одного места в другое.

Мы можем использовать это для записи нулей в файл со специального устройства в системах Linux, расположенного в + / dev / zero +, которое просто выплевывает столько нулей, сколько требуется.

Мы определяем размер файла, используя комбинацию + bs + для размера блока и + count + для количества блоков. То, что мы назначаем каждому параметру, почти полностью произвольно. Важно то, каким продуктом их умножения оказывается.

Например, в нашем примере мы ищем файл размером 1 гигабайт. Мы можем сделать это, указав размер блока 1 мегабайт и счетчик 1024:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
Output1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.36622 s, 786 MB/s

Проверьте вашу команду перед нажатием клавиши ENTER, потому что она может уничтожить данные, если вы укажете + of + (что означает выходной файл) в неправильное место.

Мы можем видеть, что 1 гигабайт был выделен, набрав:

ls -lh /swapfile
Output-rw-r--r-- 1 root root  May 30 15:07 /swapfile

Если вы выполнили приведенную выше команду, вы можете заметить, что это заняло несколько секунд. Только 1,3 секунды для этого небольшого файла подкачки, но это может значительно увеличить для больших файлов на медленных жестких дисках.

Если вы хотите узнать, как создать файл быстрее, удалите файл swapfile с помощью + sudo rm / swapfile +, а затем выполните следующие действия:

Более быстрый путь

Более быстрый способ получить тот же файл - использовать программу + fallocate +. Обратите внимание, что эта команда работает только с более современными файловыми системами, поэтому, если вы, например, используете систему + ext3 +, эта опция вам недоступна.

Команда + fallocate + создает файл предварительно выделенного размера мгновенно, без необходимости записывать фиктивное содержимое.

Мы можем создать файл объемом 1 гигабайт, набрав:

sudo fallocate -l 1G /swapfile

Приглашение будет возвращено вам почти сразу. Мы можем проверить, что правильное количество места было зарезервировано, набрав:

ls -lh /swapfile
Output-rw-r--r-- 1 root root  May 30 15:07 /swapfile

Как видите, наш файл создан с правильным количеством выделенного пространства.

Шаг 4 - Включение файла подкачки

Теперь, когда у нас есть файл правильного размера, нам нужно превратить его в пространство подкачки.

Во-первых, нам нужно заблокировать права доступа к файлу, чтобы только пользователи с правами * root * могли читать содержимое. Это не позволяет обычным пользователям иметь доступ к файлу, что может иметь значительные последствия для безопасности.

Сделайте файл доступным только для пользователя root, набрав:

sudo chmod 600 /swapfile

Проверьте изменение разрешений, набрав:

ls -lh /swapfile
Output 1 root root 1.0G May 29 17:34 /swapfile

Как видите, только у пользователя * root * включены флаги чтения и записи.

Теперь мы можем пометить файл как пространство подкачки, набрав:

sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1048572 KiB
no label, UUID=757ee0b7-db04-46bd-aafb-adf6954ea077

После отметки файла мы можем включить файл подкачки, позволяя нашей системе начать использовать его:

sudo swapon /swapfile

Убедитесь, что своп доступен, набрав:

sudo swapon --show
OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

Мы можем проверить вывод утилиты + free +, чтобы подтвердить наши выводы:

free -h
Output             total       used       free     shared    buffers     cached
Mem:          1.0G       925M        74M       4.3M        13M       848M
-/+ buffers/cache:        63M       936M

Наш обмен был успешно установлен, и наша операционная система начнет использовать его по мере необходимости.

Шаг 5 - Создание файла подкачки постоянным

Наши последние изменения включили файл подкачки для текущего сеанса. Однако, если мы перезагружаемся, сервер не будет автоматически сохранять настройки подкачки. Мы можем изменить это, добавив файл подкачки в файл + / etc / fstab.

Создайте резервную копию файла + / etc / fstab + на случай, если что-то пойдет не так:

sudo cp /etc/fstab /etc/fstab.bak

Добавьте информацию о файле подкачки в конец файла + / etc / fstab +, набрав:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

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

Шаг 6 - Настройка параметров свопинга

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

Настройка свойства Swappiness

Параметр + swappiness + определяет, как часто ваша система выгружает данные из ОЗУ в пространство подкачки. Это значение от 0 до 100, которое представляет собой процент.

При значениях, близких к нулю, ядро ​​не будет выгружать данные на диск без крайней необходимости. Помните, что взаимодействие с файлом подкачки «дорого», так как оно занимает намного больше времени, чем взаимодействие с ОЗУ, и может привести к значительному снижению производительности. Указание системе не полагаться на своп слишком часто сделает вашу систему быстрее.

Значения, близкие к 100, будут пытаться поместить больше данных в раздел подкачки, чтобы освободить больше места в ОЗУ. В зависимости от профиля памяти ваших приложений или того, для чего вы используете сервер, в некоторых случаях это может быть лучше.

Мы можем увидеть текущее значение подкачки, набрав:

cat /proc/sys/vm/swappiness
Output60

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

Мы можем установить swappiness на другое значение, используя команду + sysctl +.

Например, чтобы установить swappiness на 10, мы могли бы набрать:

sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10

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

sudo nano /etc/sysctl.conf

Внизу вы можете добавить:

/etc/sysctl.conf

vm.swappiness=10

Сохраните и закройте файл, когда вы закончите.

Регулировка настройки давления кэша

Другим связанным значением, которое вы можете изменить, является + vfs_cache_pressure +. Этот параметр определяет, сколько система выберет для кэширования inode и dentry информации поверх других данных.

По сути, это данные доступа к файловой системе. Как правило, это очень дорого для поиска и очень часто запрашивается, поэтому для вашей системы это хорошая вещь для кеширования. Вы можете увидеть текущее значение, снова запросив файловую систему + proc +:

cat /proc/sys/vm/vfs_cache_pressure
Output100

В настоящее время наша система слишком быстро удаляет информацию об индексах из кэша. Мы можем установить более консервативную настройку, например, 50, набрав:

sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

Внизу добавьте строку, которая задает ваше новое значение:

/etc/sysctl.conf

vm.vfs_cache_pressure=50

Сохраните и закройте файл, когда вы закончите.

Заключение

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

Если вы сталкиваетесь с ошибками OOM (нехватка памяти) или обнаруживаете, что ваша система не может использовать приложения, которые вам нужны, лучшее решение - оптимизировать конфигурации приложений или обновить сервер.

Related