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


293

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

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

Ответы:


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

Не могли бы вы объяснить, что означает «если = ...», «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

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


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

1

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

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

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


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 лет назад.
— Нильс Вернер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.