Почему образы EC2 Ubuntu не имеют подкачки?

82

Я запустил пару серверов на EC2, и у них нет свопа.

Я что-то не так делаю или машины просто не имеют?

rafamvc
источник
Мне тоже это интересно, но я просто настроил экземпляр EBS, отформатировал его как swap и swapon / dev / sdg ...
Том О'Коннор
Также типично случай использования SSD-дисков в системе Linux, чтобы не устанавливать своп на SSD-накопитель. Главным образом, потому что некоторые люди параноики, это может оказать негативное влияние на срок хранения твердотельного накопителя, если все время сверлить один и тот же набор секторов.
Джангофан
1
Какой AMI и какой размер экземпляра EC2. AMI должен быть настроен на использование раздела подкачки, и экземпляр должен быть добавлен при запуске.
Джереми Бауз
Если это вообще возможно, я бы посоветовал не использовать своп на EC2, если вы не уверены на 99%, что вам не придется его использовать (т. Е. Он предназначен только для экстренных случаев). Когда мы отключили своп на некоторых наших экземплярах EC2, наши ежемесячные затраты на ввод-вывод EBS, вероятно, сократились вдвое. Просто мои два цента, чтобы сэкономить вам два цента - да, это было ужасно, я извиняюсь и пойду прятаться в углу;)
Smudge
Вы также можете посмотреть эти шаги: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Артем. Борисов

Ответы:

74

Вы правы, образы Ebu Ubuntu EC2 не поставляются с настроенным пространством подкачки (по крайней мере, для 11.04 ). «Обычные» образы экземпляра имеют раздел подкачки, хотя на том, который я тестировал, только 896 МБ.

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

  • Создайте том EBS (в 2-4 раза превышающий объем вашей оперативной памяти), присоедините его к вашему экземпляру (мне нравится называть его / dev / xvdm для «памяти») sudo mkswap /dev/xvdm, добавьте его в fstab sudo swapon -a, и вы готовы идти , Я делал это раньше, и он отлично работает, но он, вероятно, немного медленнее, чем хранилище экземпляров, потому что он идет по сети.

  • Или вы можете переразбить диск, чтобы добавить раздел подкачки, хотя для этого может потребоваться создание нового AMI. Я не смог сделать это в работающем экземпляре, потому что я не могу размонтировать корневую файловую систему, и у меня даже нет доступа к дисковому устройству (/ dev / xvda), только раздел (xvda1).

  • Или вы можете создать файл подкачки. Это мое предпочтительное решение прямо сейчас.

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    Готово. :) Я знаю, что многие люди чувствуют себя не в своей тарелке из-за использования файлов вместо разделов, но это, безусловно, достаточно хорошо работает в качестве места для аварийного обмена.

Джо Лисс
источник
4
Переключение на объем EBS может привести к дополнительным расходам, как указано в других ответах. Не использование подкачки или подкачки в хранилище экземпляров кажутся лучшими решениями.
Исулдор
7
Использование хранилища экземпляров - лучший вариант, чем EBS. EBS является сетевой файловой системой, поэтому подключается к экземпляру EC2 по тому же сетевому соединению, что и все остальное. Хранилище экземпляров подключено к оборудованию, на котором размещен экземпляр (поэтому он не сохраняется при остановке и запуске экземпляра). Единственный раз, когда EBS является опцией подкачки, это когда вы используете тип экземпляра, который не поставляется с хранилищем экземпляра, т. Е. T1.micro (который имеет только 620 МБ ОЗУ, вероятно, действительно нуждается в экстренной помощи). поменять местами).
ColtonCat
Bs = 1M уже находится в двоичной записи, поэтому множитель count = 2048 должен быть count = 2000 - если я не ошибаюсь.
ypocat
1
Если вы собираетесь 2GiB, то 1024 * 2048 кажется правильным.
Джо Лисс
25

Лучшее место для обмена IMHO - это магазин экземпляров. Почему? AWS не взимает плату за ввод-вывод в магазине экземпляров. Кроме того, хранилище экземпляров во многих случаях более производительно, чем EBS. Просто убедитесь, что у вас есть скрипт, который воссоздает файл подкачки на случай, если вы остановите экземпляр. Перезагрузки в порядке. Почему это не там по умолчанию?

Давайте найдем экземпляр магазина.

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Ура, 160.1GB бесплатно! Поместите туда свой своп и забудьте о 100-процентных перерасходах на сервер, когда ваш своп на основе EBS наполнился ошибкой. К сожалению, опыт общения здесь.

Видимо, в некоторых случаях вы не видите хранилище экземпляров.

В зависимости от типа экземпляра сначала необходимо подключить тома хранилища экземпляров к экземпляру с помощью параметров сопоставления блочных устройств. Если вы этого не сделаете, вы можете даже не увидеть устройства в каталоге / dev (согласно Как использовать хранилище «Instance Store Volumes» в Amazon EC2? )

sebwinadmin
источник
1
просто хочу отметить, что пользователи t1.micro на бесплатном уровне не могут использовать эту опцию.
Рувим Л.
20

Примечание : Amazon изменил свою ценовую политику и не взимает плату за запросы ввода-вывода с середины 2016 года. Ответ хранится здесь по историческим причинам, но нет никаких затратных последствий использования (или не использования) свопа на экземплярах, поддерживаемых EBS в EC2.


Это по замыслу. По умолчанию своп отключен в инстансах, поддерживаемых EBS EC2, чтобы избежать непредсказуемых затрат.

Если у вас есть приложение с нехваткой памяти, которое работает плохо (скажем, на маленьком или маленьком экземпляре), оно может генерировать довольно большое количество запросов ввода-вывода на томе EBS. Amazon взимает $ 0,10 за 1 миллион запросов ввода / вывода (см. Http://aws.amazon.com/pricing/ebs/ ) .

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

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

Ги Амброс
источник
Этот ответ немного вводит меня в заблуждение или сбивает с толку, так как наиболее распространенные типы экземпляров используют тома SSD. aws.amazon.com/ec2/instance-types
Тейлор Эдмистон
2
@tedmiston: действительно, этот ответ больше не применим. Я приспособился, чтобы отразить новую реальность, но в основном за запросы ввода / вывода не взимается плата, поэтому включение свопа (или нет) теперь может быть сделано на чисто технической основе.
Ги Амброс
1

Проверьте /etc/fstabфайл, они, вероятно, были установлены без замены в изображении, которое вы используете. Я думаю, что некоторые люди работают без подкачки для серверов, так как они ожидают, что никогда не будут использовать больше, чем общая память - подкачка делает все очень медленно.

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

ehsanul
источник
2
Случайный обмен не замедляет работу системы.
laebshade
0

Простое решение для работы swapв EC2изображениях , чтобы запустить swapсжат lz4в ramс zram-init.

  • Сервисные сценарии доступны для systemd& openrc.

Это решение никак не взять ramдалеко от host:

введите описание изображения здесь

Стюарт Кардалл
источник
1
Очень креативно, но разве использование оперативной памяти в качестве реальной оперативной памяти не имеет больше смысла, чем использование ее в качестве файловой системы в оперативной памяти для подкачки? (который в основном используется, когда у вас заканчивается память) Сокращение объема доступной памяти для приложений для создания подкачки кажется нелогичным ...
HBruijn
Интересный ответ, но я думаю, что использование EBS / instance store, вероятно, является лучшим решением общего назначения. У меня есть t2.nano с 512 МБ оперативной памяти и 512 МБ подкачки на EBS, который работает нормально.
Тим
Это явно требует ОЗУ от хоста (экземпляр EC2) - откуда еще берется ОЗУ? Единственным преимуществом этого подхода является сжатие части вашей общей оперативной памяти, но она не дает возможности использовать SSD в качестве подкачки. Вместо этого вы можете использовать zswapсжатый кэш ОЗУ поверх обычного файла / диска подкачки: wiki.archlinux.org/index.php/zswap . См. Cnx-software.com/2018/05/14/… для получения дополнительной информации о Zram.
RichVel