Как добавить своп в экземпляр EC2?

293

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

Что может быть сделано, кроме использования большего размера экземпляра?

ajtrichards
источник

Ответы:

574

Решением этой проблемы является добавление swap(т.е. paging) места в экземпляр.

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

Чтобы добавить это дополнительное пространство к вашему экземпляру, введите:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

Если вам нужно больше 1024, тогда измените это на что-то более высокое.

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

/var/swap.1   swap    swap    defaults        0   0
ajtrichards
источник
Не могли бы вы объяснить, что означает «если = ...», «of = ...», bs = 1M и count = 1024, потому что я никогда не видел if, of и = в списке аргументов.
ア レ ッ ク ス
31
ifозначает «входной файл», ofозначает «выходной файл», bsозначает «размер блока» и countявляется количеством блоков, которое вы хотите выделить… вы можете прочитать manстраницу команды для получения дополнительной информации: linux.die.net/man/1/ дд
Фабио Батиста
4
Эта командная строка dd означает «скопировать из / dev / zero в /var/swap.1. Сделайте это, прочитав 1024 блока размером 1 мегабайт». Это быстрый способ создать файл размером 1 Гбайт, заполненный нулями.
Нельсон
3
достаточно старый, но моя память подкачки остается 0% используемой даже после перезагрузки, любая помощь?
Гирдхари Агравал
3
Если вы хотите проверить, активен ли своп:$> free -m
herve
216

Обмен должен происходить на диске хранения данных (эфемерном), а не на устройстве EBS. Обмен вызовет много IO и увеличит стоимость на EBS. EBS также работает медленнее, чем Instance Store, а Instance Store поставляется бесплатно с некоторыми типами EC2 .

Обычно он монтируется в / mnt, но если не запускается

sudo mount /dev/xvda2 /mnt

Чтобы затем создать файл подкачки на этом устройстве, выполните следующие действия для файла подкачки объемом 4 ГБ.

sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096

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

sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile

Сделать и пометить как своп

sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile

Добавьте / убедитесь, что в вашем / etc / fstab есть следующее

/dev/xvda2      /mnt    auto    defaults,nobootwait,comment=cloudconfig 0   2
/mnt/swapfile swap swap defaults 0 0

наконец включить своп

sudo swapon -a
Дэвид
источник
6
это, безусловно, самый полный ответ ИМО
Джон Б.
4
Для монтирования файловой системы необходимо указать тип файловой системы. Чтобы найти файловую систему, введите команду: $ df -T Это покажет вам устройства и их файловые системы. В основном ext4. Для меня это был / dev / xvda1, а не 2.
user1452686
8
Согласно docs.aws.amazon.com/AWSEC2/latest/UserGuide/… больше нельзя добавлять хранилища экземпляров в экземпляры t1 / t2. После попытки независимо, это будет выглядеть правильно.
баранина
3
@alfetopito Вы, вероятно, можете создать буквенный файл подкачки в существующем разделе вместо добавления другого раздела в качестве раздела подкачки. Хороший гид для Centos 6 - digitalocean.com/community/tutorials/...
muttonUp
1
Согласно Amazon, не гарантируется, что вы сохраните свое хранилище экземпляров после перезагрузки, не сработает ли тогда fstab?
сдавал
42

После применения шагов, упомянутых ajtrichards, вы можете проверить, использует ли ваша инстанция уровня бесплатного пользования Amazon swap с помощью этой команды

cat /proc/meminfo

результат:

ubuntu@ip-172-31-24-245:/$ cat /proc/meminfo
MemTotal:         604340 kB
MemFree:            8524 kB
Buffers:            3380 kB
Cached:           398316 kB
SwapCached:            0 kB
Active:           165476 kB
Inactive:         384556 kB
Active(anon):     141344 kB
Inactive(anon):     7248 kB
Active(file):      24132 kB
Inactive(file):   377308 kB
Unevictable:           0 kB
Mlocked:               0 kB

SwapTotal: 1048572 кБ

SwapFree: 1048572 кБ

Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        148368 kB
Mapped:            14304 kB
Shmem:               256 kB
Slab:              26392 kB
SReclaimable:      18648 kB
SUnreclaim:         7744 kB
KernelStack:         736 kB
PageTables:         5060 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1350740 kB
Committed_AS:     623908 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7420 kB
VmallocChunk:   34359728748 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
HimalayanCoder
источник
40

Вы можете добавить 1 ГБ подкачки к вашему экземпляру с помощью этих команд:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile

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

/swapfile swap swap defaults 0 0
Дэвид Левеск
источник
Но из какой моей файловой системы потребуется место для создания Swap?
Хуссейн
@Hussain Это создаст подкачку в корневой файловой системе, поскольку путь /swapfile. Но вы также можете смонтировать другую файловую систему и создать там файл подкачки, например /mnt/blah/swapfile.
Дэвид Левеск
Можно подтвердить, что это работает на экземпляре t2.micro. Я сделал мой @ / mnt / swap, хотя мне нравится чистый корень.
Майк Перселл
1
Проголосовал этот ответ, потому что он самый короткий и выполняет свою работу. Однако следует добавить команду swapfile chmod 600.
Сыбер
15

Если вы находитесь на t2случаях ( t2.micro, t2.medium, t2.small), не эфемерное или экземпляр для хранения доступны для вас. Так что вам нужно просто создать свой своп, в EBSкотором в зависимости от вашего варианта использования может быть или не быть хорошей идеей. В противном случае следуйте ответу @David и создайте своп в эфемерном хранилище, чтобы избежать оплаты расходов EBS.

Дополнительная информация: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html есть таблица, показывающая, сколько эфемерного хранилища вы получаете для каждого типа экземпляра.

Али
источник
1
Могу подтвердить это вообще плохой идеей. Если у вас есть мошеннический процесс (у меня был сервер узлов и настройка python / celery), вы будете нести кучу расходов, когда он будет читать и записывать в ваш блок EBS всю неделю, не зная: -)
ЗакМ
3
Согласно aws.amazon.com/ebs/pricing , IO включен во все тома EBS, кроме предоставленного SSD IPOS (io1). Вы только за ГБ. Это могло быть недавним изменением в модели ценообразования, но это означает, что, хотя EBS намного медленнее, чем истинное хранилище экземпляров, дополнительная плата за чтение и запись не взимается.
bobsoap
@bobsoap Не могли бы вы уточнить это? Я проверил вашу ссылку и нашел это For example, if you provision a volume with 1000 IOPS, and keep this volume for 15 days in a 30 day month, then in a Region that charges $0.10 per provisioned IOPS-month, you would be charged $50 for the IOPS that you provision ($0.10 per provisioned IOPS-month * 1000 IOPS provisioned * 15 days/30). You will be charged for the IOPS provisioned on a volume even when the volume is detached from an instance.. Кажется, что AWS будет взимать плату за операции чтения и записи.
Вальтер Сильва
2
@ValterHenrique Текст, который вы цитируете, относится только к томам с подготовленным IOPS, но у вас есть выбор между несколькими разными типами томов. Если вы используете «обычный» том без подготовленного IOPS (например, тип тома SSD общего назначения, называемый «gp2»), операции чтения и записи не оплачиваются дополнительно. Может быть, лучшая ссылка для сравнения: aws.amazon.com/ebs/details
bobsoap
8

Вы можете создать пространство подкачки, используя следующие шаги. /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Здесь количество килобайт подсчитывает пространство подкачки

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    сделать запись:
    /home/swapfile1 swap swap defaults 0 0

  4. бегать:
    swapon -a

minhas23
источник
4

Мы можем добавить пространство подкачки на любом сервере

создать файл с помощью команды dd

 #dd if=/dev/zero of=/swapfile bs=1M count=2048
                    or
 #dd if=/dev/zero of=/swapfile bs=1024M count=2

bs - это размер блока, а count относится к размеру в МБ или ГБ.

мы можем использовать наоборот

После создания измените разрешение файла:

 #chmod 600 /swapfile 

Затем делает своп файла:

 #mkswap /swapfile 

Затем включите файл подкачки с помощью команды swapon:

 #swapon  /swapfile 

Проверьте с помощью команды free, включен ли swap:

 #free -h
 #swapon -s
Джавид Шакил
источник
3

Использование ответа David Instance Storage изначально работало для меня (на m5d.2xlarge), однако после остановки экземпляра EC2 и его повторного включения я не смог снова подключиться к ssh.

Журналы экземпляров сообщают: «Вы находитесь в аварийном режиме. После входа в систему введите« journalctl -xb »для просмотра системных журналов,« systemctl reboot »для перезагрузки,« systemctl default »или« exit »для загрузки в режиме по умолчанию. Нажмите Enter для поддержания"

Вместо этого я следовал инструкциям AWS в этой ссылке, и все работало отлично, в том числе после выключения и повторного включения экземпляра.

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon -s

sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
DaveJay
источник
1

Попробуйте swapspace http://pqxx.org/development/swapspace/

У большинства дистрибутивов это есть.

На EC2 вы можете изменить «swappath» на / mnt или high-iops диск.

rdoroshenko
источник
1
Из документации: «В своей нынешней форме Swapspace, вероятно, не является хорошим выбором для систем, которые должны постоянно реагировать»;
Дейв Альберт
-3

Вы можете использовать следующий скрипт для добавления подкачки в Amazon Linux.

https://github.com/chetankapoor/swap

Загрузите скрипт с помощью wget:

wget https://raw.githubusercontent.com/chetankapoor/swap/master/swap.sh -O swap.sh

Затем запустите скрипт в следующем формате:

sh swap.sh 2G

Для полного урока вы можете посетить:

https://installvirtual.com/shell-script-to-create-swap/

Четан Капур
источник
Я не вижу, что дает этот ответ, кроме того, что он представляет собой шеллскрипт, который в основном делает то, что уже объяснил принятый ответ.
Нильс Вернер
Я только что создал сценарий оболочки, который экономит время, поэтому вместо выполнения 5 команд будет 2 шага для создания свопа, и если своп уже существует, он покажет, что своп уже есть.
Четан Капур
3
Именно. Скрипт, который я должен запускать от имени root. Сделано кем-то где-то, что может измениться или исчезнуть без уведомления. Все для сохранения 4-5 командных строк, которые были размещены и приняты 5 лет назад.
Нильс Вернер