Я запустил пару серверов на EC2, и у них нет свопа.
Я что-то делаю не так, или в машинах их просто нет?
Вы правы, образы Ubuntu EC2 EBS не идут с настроенным пространством подкачки (для 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
Готово. :) Я знаю, что многим неприятно использовать файлы вместо разделов, но это определенно работает достаточно хорошо в качестве места для аварийной подкачки.
Лучшее место для подкачки IMHO - это instance-store. Зачем? 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,1Гб бесплатно! Поместите сюда свой своп и забудьте о перерасходе в 100 долларов на сервер, когда ваш своп на основе EBS по ошибке роится. Прискорбный опыт здесь говорят.
По-видимому, в некоторых случаях вы не видите хранилище экземпляров.
В зависимости от типа экземпляра сначала необходимо присоединить тома хранилища экземпляров к экземпляру с помощью параметров сопоставления блочных устройств. Если вы этого не сделаете, вы можете даже не увидеть устройства в / dev (согласно Как использовать хранилище Instance Store Volumes в Amazon EC2?)
Заметка: Amazon изменил свои ценовая политикаи не взимает плату за запросы ввода-вывода с середины 2016 года. Ответ сохранен здесь по историческим причинам, но использование (или неиспользование) свопа на инстансах с поддержкой EC2 EBS не связано с затратами.
Это сделано намеренно. По умолчанию своп отключен для инстансов с поддержкой EC2 EBS, чтобы избежать непредсказуемых затрат.
Если у вас есть приложение, требующее много памяти, которое выходит из строя (скажем, на крошечном или маленьком экземпляре), оно может генерировать довольно большое количество запросов ввода-вывода на вашем томе EBS. Amazon взимает 0,10 доллара США за 1 миллион запросов ввода-вывода (см. http://aws.amazon.com/pricing/ebs/).
В нормальных условиях об этом не стоит беспокоиться; Обычно стоимость запросов ввода-вывода даже на небольших экземплярах составляет несколько долларов, если так. Итак, если вы знаете, что у вас есть экземпляр надлежащего размера и этот своп будет использоваться нечасто, включите его. Но будьте осторожны с крошечными экземплярами.
Если вы включите свопинг, возможно, вы захотите следить за отчетами об использовании. При желании вы также можете настроить уведомление о выставлении счетов, перейдя в Панель управления CloudWatch и создание нового сигнала тревоги для общей суммы счета. Таким образом, вы сразу же получите уведомление о том, что с вашими экземплярами происходит что-то странное.
Проверить /etc/fstab
файл, они, вероятно, были настроены без подкачки в используемом вами изображении. Я думаю, что некоторые люди работают без свопа для серверов, поскольку они не ожидают, что никогда не будут использовать больше общей памяти - подкачка делает все очень медленным.
Тем не менее, я всегда параноидально относился к раздувающемуся процессу в памяти, поэтому я думаю, что с вашей стороны было бы разумно просто настроить диск подкачки и воссоздать образ из запущенного экземпляра ec2.