Як додати swap до екземпляра 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

Чи можете ви поясніть, що це означає "if = ...", "of = ...", bs = 1M і count = 1024, тому що я ніколи не бачив, якщо і з = у списку аргументів.
ア レ ッ ク ス

31
ifозначає "вхідний файл", ofозначає "вихідний файл", bsозначає "розмір блоку" і countце кількість блоків, які потрібно виділити ... Ви можете прочитати manсторінку команди для отримання додаткової інформації: linux.die.net/man/1/ дд
Фабіо Батіста

4
Цей командний рядок dd означає "скопіювати з / dev / zero в /var/swap.1. Зробіть це, прочитавши 1024 блоки розміром 1 мегабайт". Це швидкий спосіб створити 1 Гб файл, заповнений нулями.
Нельсон

3
досить старий, але моя обмін пам'яттю залишається 0% використана навіть після перезавантаження, будь-яка допомога?
Girdhari Agrawal

3
Якщо ви хочете перевірити, чи активний своп:$> free -m
herve

216

Заміна повинна відбуватися на накопичувальному (ефемерному) диску, а не на пристрої EBS. Заміна призведе до великої кількості IO і збільшить витрати на EBS. EBS також повільніше, ніж у магазині інстанцій, і магазин екземплярів стає безкоштовним із деякими типами інстанцій EC2 .

Зазвичай він встановлюється в / mnt, але якщо не працює

sudo mount /dev/xvda2 /mnt

Щоб потім створити файл swap на цьому пристрої, виконайте наступне для swapfile 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
це, безумовно, найбільш вичерпна відповідь imo
Jon B

4
Для монтажу файлової системи потрібно вказати тип файлової системи. Для пошуку файлової системи команда: $ df -T Це покаже вам пристрої та їх файлові системи. Переважно ext4. Для мене це було / dev / xvda1, а не 2.
user1452686

8
Відповідно до docs.aws.amazon.com/AWSEC2/latest/UserGuide/… більше не можна додавати сховища інстанцій до примірників t1 / t2. Після спроби незалежно це здасться правильним.
Баранина

3
@alfetopito Ви, ймовірно, можете створити буквальний swapfile на існуючому розділі замість того, щоб додавати інший розділ як swap. Приємний путівник по Centos 6 - digitalocean.com/community/tutorials/…
ovt

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

Загальний обмін: 1048572 кБ

Зміна безкоштовно: 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 слід додати.
Sõber

15

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

Більше інформації: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html є таблиця, яка показує, скільки ефемерних сховищ ви отримуєте для кожного типу примірника.


1
Можна підтвердити, що це взагалі погана ідея. Якщо у вас є процес, який переходить в шахрайство (у мене був сервер вузлів, що робив це, і налаштування пітона / селери), ви стягуватимете безліч зарядів, коли він читатиме і записується у ваш блок EBS весь тиждень, не знаючи: -)
ЗачМ

3
Згідно з aws.amazon.com/ebs/pricing , IO включений у всі томи EBS, крім передбаченого IPOS SSD (io1). Ви тільки за Гб. Це могло бути нещодавньою зміною моделі ціноутворення - але це означає, що хоча EBS набагато повільніше, ніж справжня Instance Storace, додаткових зборів за читання та записування немає.
бобсоап

@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 - це блочний розмір, а кількість посилається на розмір у МБ або ГБ

ми можемо використовувати навпаки

Після створення змініть дозвіл на файл:

 #chmod 600 /swapfile 

Тоді робимоwawa файл:

 #mkswap /swapfile 

Потім увімкніть файл swap за допомогою команди swapon:

 #swapon  /swapfile 

З вільною командою перевірте, чи включена підміна:

 #free -h
 #swapon -s

3

Використовуючи відповідь про зберігання екземплярів Девіда, спочатку працював у мене (на m5d.2xlarge), однак, після зупинки екземпляра EC2 та його ввімкнення я не зміг знову ввійти в екземпляр.

Журнали екземпляра повідомляли: "Ви знаходитесь в аварійному режимі. Після входу введіть" journalctl -xb ", щоб переглянути системні журнали," перезавантажити systemctl ", щоб перезавантажити," systemctl за замовчуванням "або" Вийти "для завантаження в режим за замовчуванням. Натисніть 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 або диск з високим іопсом.


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/


Я не бачу, до чого сприяє ця відповідь, окрім того, що я просто оболонка, яка в основному робить те, що прийнята відповідь уже пояснювала.
Нілс Вернер

Я щойно створив скрипт оболонки, це економить час, тому для створення swap замість запуску 5 команд буде два кроки, і якщо swap вже існує, він покаже, що ви заміни вже є.
Четанський капур

3
Саме так. Оболонка, яку я повинен виконувати як корінь. Зроблений кимось, десь, що може змінитися або зникнути без повідомлення. Все для збереження 4-5 командних рядків, які були розміщені та прийняті 5 років тому.
Нілс Вернер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.