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

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

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

11 ответов

Решение

Решение этой проблемы - добавить 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

Обмен должен происходить на диске хранения данных (эфемерном), а не на устройстве 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

Вы можете добавить 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

После применения шагов, упомянутых 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

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

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

Использование ответа 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

Вы можете создать пространство подкачки, выполнив следующие шаги. /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

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

создать файл с помощью команды 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

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

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

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

Вы можете использовать EFS для решения этой проблемы с хранилищем в EC2. Сделать это-

  1. Создать том EFS
  2. Подключите его к каталогу приложения, которое вы используете на своем EC2.

EFS — это масштабируемая, полностью управляемая служба хранения файлов. Перейдите по этой ссылке https://aws.amazon.com/efs/ для получения дополнительной информации.

Вы можете использовать следующий скрипт для добавления подкачки в 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/

Другие вопросы по тегам