Перейти к содержимому

Free swap space что это

  • автор:

SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux

SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.

Когда может понадобиться своп

Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:

  1. Постоянное падение сайта: Ошибка соединения с базой данных — означает, например, что MySQL упал;
  2. При внимательном изучении логов /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 — это не замена оперативной памяти, а всего лишь его поддержка.

Как создать и подключить файл подкачки SWAP

Далее, в работе используется командная строка SSH.
Инструментарий: Far Manager или Putty.
Для примера приводятся команды из под root . Если Вы работаете не под root , перед командами задавайте префикс sudo

Проверка наличия свопа в системе

Для начала, нужно убедиться, что своп ещё не подключен:

Если команда выдала пустой результат или что-то навроде:

— значит, своп, скорее всего отсутствует.

Дополнительно проверим командой:

Своп нулевой

Если в таблице в строке swap стоит 0, значит своп отсутствует.

Проверка наличия свободного места на диске

Теперь, надо проверить, сколько свободного места есть на диске:

В результате, мы увидим что-то подобное:

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

Какого размера создать swap

Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.

Создание файла SWAP

Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:

Быстрый способ Используем fallocate :

Результатом будет пустая строка, это нормально.
В отличие от dd , результат будет получен почти сразу, и я рекомендую именно его. Традиционный, медленный способ Или используем команду:

Синтаксис команды простой:

  • dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
  • if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
  • of=/swapfile — указывает путь назначения, куда копируем данные;
  • bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
  • count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.

Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске.

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

В результате увидим:
-rw-r—r— 1 root root 4.0G Jul 07 16:16 /swapfile
Как видим, файл создался верно и с нужным объёмом.

Как подключить SWAP файл

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

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

В результате, мы должны увидеть подобное:
-rw——- 1 root root 4.0G Jul 07 16:16 /swapfile
Права прописаны верно.

Теперь нужно сделать из swapfile файл подкачки:

В результате, увидим примерно следующее:
Setting up swapspace version 1, size = 4193300 KiB
no label, UUID=e5f3e9cf-c1a9-4ed4-b8ab-711b6a7d6544

Теперь, файл готов в роли свопа. Подключим его к системе:

Если на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера от 100 рублей в месяц и виртуализация KVM позволяют включать SWAP.

Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:

Своп также будет виден в стандартных командах:

Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.

Добавление свопа в автозагрузку

Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab :

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

Дополнительные вопросы

Как очистить SWAP в Linux

Вообще, это делается с помощью отключения и включения свопа.

Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.

Русские Блоги

Zabbix: Отсутствие свободного места для подкачки на решении Zabbix server

проблема

При использовании Zabbix для мониторинга некоторых облачных хостов вы можете столкнуться с:

 .png

Общие, использованные и свободные значения свопа равны 0. Это потому, что Zabbix не учитывает пользователей облачного хоста.

Этапы обработки:

1. Управление-шаблон-шаблон ОС Linux-Trigger

 .png

 .png

2. Выберите "Отсутствие свободного места для подкачки на ".

 .png

3. Изменить выражение

 .png

Нажмите «Обновить», чтобы сохранить, подождите некоторое время, оно станет «Решено», подтвердите

Нехватка памяти на сервере

Не так давно я создавал тред, где переживал что апач с одним единственным сайтом из хмтл страничек отжирает всю память на серваке. Меня успокоили, что он отжирает свободную память под кеш, что свободная память все равно никак не используется и как только она понадобится, то апач мне её вернет. Прошло несколько месяцев, сервер никто не трогал. Сегодня установил zabbix и он сразу же выдал мне сообщение о проблеме Lack of free swap space on Zabbix server. Получается память для него так и не освободилась? Как с этим боротся? Не может же быть такого, что apache2 со статическим сайтом + zabbix отжирают 2 гигабайта оперативки?

Не ужеле не можете посмотреть, кто сколько памяти отжирает?

Судя по выводу free — cвоп у вас не подключен\отсутствует, соответственно свободного пространства в нем 0.

Апач всё отжирает. Поидее он должен отжирать неиспользуемую память для убыстрения работы, но вот сейчас память нужна, а он её не отдает

Lack of free swap space (Отсутствие свободного пространства подкачки)

Не может же быть такого, что apache2 со статическим сайтом + zabbix отжирают 2 гигабайта оперативки?

Вот сколько памяти у тебя занято приложениями.

Странно, VPS машину создали без свапа получается? теперь вручную его пилить

Записки IT специалиста

Linux — начинающим. Что такое пространства подкачки и как они работают

  • Автор: Уваров А.С.
  • 22.04.2022

linux-swap-000.pngПодкачка, она же swap или своп — понятие знакомое каждому, вне зависимости от того с каким семейством ОС приходится работать. Да и представление о процессе вроде бы имеется. Именно, что «вроде бы», если спросить, как работает пространство подкачки, то услышим стандартные фразы про недостаток памяти и сброс второстепенных страниц на диск. А можно и вообще услышать, что памяти сегодня много и подкачка не нужна. Так ли это на самом деле или происходящие процессы гораздо более глубоки? Давайте разбираться.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Начнем с того, что процессор может исполнять код и обрабатывать данные только после их помещения в оперативную память (далее просто память), которая организована в виде набора адресуемых сегментов — страниц. Минимальный размер страницы для 32-битного процессора x86 — 4 КБ, современные системы могут работать со страницами большего размера.

На заре развития вычислительной техники памяти было немного и остро стоял вопрос ее эффективного использования, тогда же возникло предложение использовать для хранения страниц не только оперативную память, но и специально размеченное место на дисковых накопителях. Это позволяло при недостатке памяти вытеснить на диск редко используемые страницы и освободить память для работающих приложений. Данный процесс и получил название подкачки. Общий объем физической памяти и пространств подкачки называется виртуальной памятью.

Собственно, для системы нет никакой разницы, где находится требуемая страница: в памяти — хорошо, в пространстве подкачки — придется предварительно считать ее оттуда в память. Чтение с дисков — операция медленная (по сравнению с доступом к памяти) и поэтому вы можете заметить, что, развернув свернутое приложение приходится некоторое время подождать пока оно начнет нормально работать и при этом идет интенсивный обмен с диском.

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

Особенности использования памяти в Linux

Управление памятью — сложная тема, поэтому мы будем использовать максимально упрощенную модель, достаточную для понимания происходящих процессов. Начнем с памяти приложений, это просто и понятно — при запуске приложение загружает в память собственный код, код связанных библиотек, обрабатываемые данные. Именно этот объем памяти мы видим, как занятый в простых утилитах, таких как Системный монитор.

linux-swap-001.png

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

Почему? Обратимся к устройству файловой системы Linux, которая реализована в виде отдельного уровня абстракции — виртуальной файловой системы (VFS), которая позволяет работать с самыми различными носителями и физическими файловыми системами абсолютно прозрачно для ОС и приложений. Когда программа хочет что то прочитать или записать на диск, то ей абсолютно все равно что это такое: быстрый SSD с ext4 или флешка с FAT32, она обращается к VFS, а именно та уже через драйвер файловой системы осуществляет запись или чтение с нее.

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

Фактически за использование оперативной памяти в Linux постоянно конкурируют между собой приложения и кеш VFS, при этом однозначно отдать кому-то предпочтения нельзя, любая крайность будет негативно влиять на производительность.

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

linux-swap-002.png

А что будет, если оперативной памяти станет не хватать? Самый простой вариант — сбросить кеш, это можно сделать быстро и без особых затрат. Но это не всегда хороший вариант, да и как быть, если памяти не хватает VFS-кешу? Выгрузить какое-то приложение нельзя, для этого потребуется завершить процесс, что делать? И тут на помощь приходят пространства подкачки, зачем закрывать приложение, если можно выгрузить его страницы на диск, особенно если это приложение в данный момент не активно. Таким образом мы можем выделить нужное количество памяти под VFS-кеш без ущерба для производительности.

Именно этим объясняется использование пространств подкачки при наличии «свободной» оперативной памяти, этот момент приводит в недоумение многих начинающих администраторов. Но если же мы заглянем немного глубже, то увидим, что на самом деле «свободная» память далеко не свободна.

Проведем небольшой эксперимент. На его начало у нас было открыто и свернуто несколько приложений, включая браузер и графический редактор GIMP с загруженным в него 4К изображением. Посмотрим расклад по памяти:

linux-swap-003.png

Итак: занято 2,36 ГБ, используется кешем 1,3 ГБ и в подкачке 578 МБ. Теперь распакуем какой-нибудь достаточно большой архив, в нашем случае около 1 ГБ включающий около сотни файлов различных типов и размеров. И снова посмотрим на статистику:

linux-swap-004.png

А здесь мы увидим достаточно неожиданную картину: объем занимаемой памяти уменьшился, зато объем выделенный под кеш вырос, так же часть страниц была сброшена в своп. Если взять калькулятор и выполнить грубые прикидки, то увидим, что размер кеша вырос примерно на 400 МБ, часть этой памяти была взята из небольшого количества свободной, а другая часть была освобождена путем вытеснения части страниц в подкачку.

Благодаря этому система быстро выполнила требуемую дисковую операцию, но потом мы испытали некоторую задержку разворачивая GIMP. Но это вполне разумная плата за сохранение общей производительности системы.

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

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

Swappiness

Это параметр sysctl, задающийся в файле /etc/sysctl.conf и позволяющий установить приоритеты доступа к оперативной памяти. Он может принимать значения от 0 до 200, значение по умолчанию равно 60. Что это означает? При значении равным 100 считается что стоимость подкачки и стоимость дискового ввода-вывода равны и поэтому подкачка будет использоваться всегда, если кешу VFS требуется место в памяти, но точно также кеш будет сбрасываться, если память понадобилась приложениям.

При значениях менее 100 память приложений имеет приоритет, так при значении в 60 получается, что стоимость подкачки на 40% дороже, чем дисковый ввод-вывод и система будет стараться не свопить до определенного предела. Очень грубо этот параметр в диапазоне от 0 до 100 можно рассматривать как минимальный процент свободной оперативки при котором начнет работать подкачка.

При значении в 60 система начнет вытеснять страницы приложений в подкачку после того, как останется свободной менее 60% памяти, при 100 — подкачка будет работать всегда. Если выставить значение в ноль, то это не отключит подкачку, но она не будет использоваться до последнего, в критической ситуации система все-таки начнет сбрасывать страницы на диск, чтобы сохранить приемлемый уровень производительности.

Значения свыше 100 куда более интересны, хотя на первый взгляд практического смысла в них нет. Однако это не так, допустим у вас есть система, которая грузится с быстрого NVMe диска, но основная работа происходит с данными на HDD. Скорость современных жестких дисков доходит до 200 МБ/с, а даже самый простой NVMe свободно дает от 1500 МБ/с. Так может лучше скинуть своп на NVMe, чем вытеснять VFS-кеш?

Именно так, поэтому берем в руки калькулятор и считаем. По грубым прикидкам NVME в 8 раз быстрее. Поэтому:

Вычислить x несложно, его значение будет 22,22, теперь можем узнать 8x — это будет 177, именно это значение мы должны задать в опции swappiness если хотим агрессивно сбрасывать страницы приложений в быстрый своп ради сохранения высокой реальной производительности.

Например, вы работаете с виртуальными машинами VirtualBox расположенными на HDD, поэтому вам более интересно вытеснить в пространство подкачки данные приложений, скажем браузера, чем потерять кеш VFS, который вызовет тормоза в виртуальной машине. При этом NVMe обеспечит быструю скорость извлечения данных, и вы не почувствуете дискомфорта переключившись на браузер.

VFS cache pressure

Это еще одно значение sysctl, оно означает приоритет кеша VFS перед страницами приложений. Значение в 100% обозначает паритет, дисковый кеш и приложения имеют равный вес и вытесняются в зависимости от иных настроек.

Но если мы хотим это изменить, то нужно в /etc/sysctl.conf задать опцию

При увеличении этого числа мы получим более агрессивную политику ядра по отношению освобождения памяти занятой под дисковый кеш. Если мы хотим в 10 раз активнее освобождать кеш VFS, то следует задать значение опции равным 1000, в 100 раз — 10 000. При уменьшении значения ядро, наоборот будет избегать освобождения памяти занятой под кеш. И если установить данную опцию в ноль, то кеш VFS никогда не будет освобождаться, что может спровоцировать опасную ситуацию, когда память в системе действительно закончится.

Мы не рекомендуем изменять данный параметр без четкого понимания что именно вы делаете и зачем.

Создание и использование пространств подкачки

Классическим для Linux является использование раздела подкачки, который выделяется, обычно, в конце диска и особым образом размечается. Для этого используется особый тип файловой системы 82 (область подкачки Linux). Если вы создали раздел подкачки при установке системы, то больше ничего делать не нужно. Если же вы хотите добавить в подкачку еще один раздел, скажем sde5, то выполните одну простую команду:

Затем включите подкачку на этом разделе, перезагрузка системы не потребуется:

Чтобы автоматически подключать раздел подкачки при монтировании добавьте в /etc/fstab строку:

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

Затем изменим запись монтирования в fstab следующим образом:

Где вместо <UUID> подставьте полученный на предыдущем шаге идентификатор.

Современные системы все чаще отказываются от отдельного раздела подкачки отдавая предпочтению файлу. Это имеет ряд преимуществ в простоте и гибкости использования — изменить размер файла гораздо легче чем раздела. В остальном никакой разницы между ними нет, файл и раздел подкачки работают одинаково.

Для создания файла можно воспользоваться командой:

Или старым добрым dd:

В обоих случаях мы создадим файл размером 4 ГБ, сразу ограничим права на него:

А дальше точно также:

Для его постоянного монтирования добавьте в /etc/fstab запись:

Кстати, при помощи файла можно временно увеличить пространство подкачки, например, для выполнения какой-то ресурсоемкой разовой работы. Просто создайте и подключите еще один файл, а закончив — отключите его:

Если в системе создано несколько пространств подкачки, вне зависимости от того разделы это или файлы, то обращение к ним происходит по принципу чередования, что позволяет увеличить общую производительность подкачки, но бывают случаи, когда использование пространств нужно указать явно. Допустим у нас есть раздел подкачки на старом HDD и файл на новом быстром NVMe, нам, конечно же, хотелось бы сначала использовать своп на быстром диске, а только по его заполнению переходит на медленный жесткий.

Для этого добавим в опции монтирования еще один параметр — приоритет: минимальный приоритет 0, максимальный 32767. Чем выше приоритет, тем предпочтительнее использование данного пространства, для нескольких пространств с одинаковым приоритетом будет использоваться чередование.

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

Пространства подкачки и SSD

В настоящий момент SSD не роскошь, а основной тип накопителя для ПК, рабочих станций и серверов и поэтому нужно использовать их возможности на полную. Советы убирать с SSD подкачку, временные файлы и т.д. и т.п. кроме как вредными назвать нельзя. Поэтому размещать подкачку на SSD не только можно, но и нужно. Единственный момент, для разделов подкачки следует включить использование TRIM, для этого в опции монтирования добавьте discard:

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

Спящий режим и пространства подкачки

Спящий режим (гибернация) — особый режим завершения работы системы, когда все содержимое оперативной памяти сохраняется на жесткий диск и может быть восстановлено при включении компьютера. В Linux для этих целей используются пространства подкачки, в них вытесняются занятые страницы памяти, сохраняются настройки устройств и только после этого компьютер выключается.

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

Использование спящего режима предъявляет особые требования к размеру пространств подкачки, они должны быть способны вместить полный объем оперативной памяти, настройки устройств и собственное содержимое подкачки, если оно используется системой (а как мы видели — оно используется).

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

Какой размер файла подкачки выбрать?

Единого мнения на этот счет не существует, но есть определенные наработанные практики, которые позволяют дать рекомендации. Наиболее подробно они приведены в документации Fedora и мы приведем именно их:

Объем ОЗУ в системе Рекомендуемый размер подкачки При использовании спящего режима
Менее 2 ГБ 2 х ОЗУ 3 х ОЗУ
2 ГБ — 8 ГБ ОЗУ 2 х ОЗУ
8 ГБ — 64 ГБ 0,5 х ОЗУ 1,5 х ОЗУ
Более 64 ГБ зависит от нагрузки спящий режим не рекомендуется

Но приведенные значения не догма и могут быть пересмотрены исходя из реальных нагрузок. Так если использовать 4 ГБ подкачки для системы с объемом ОЗУ 2 ГБ выглядит нормально, то выделять 32 ГБ для системы с 64 ГБ ОЗУ выглядит излишеством, поэтому изучите реальный режим работы системы и скорректируйте размер пространства подкачки исходя из реальных запросов. Именно в этой ситуации и становятся удобны файлы подкачки — их размер очень легко менять.

Заключение

Конечно же это не все возможности, которые предоставляют пространства подкачки в Linux, многое оставлено за кадром просто потому, что объем статьи не позволяет все это вместить. Но приведенные данные являются необходимым минимумом для каждого системного администратора, который выбрал Linux как одну из используемых операционных систем.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Дополнительные материалы:

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *