如何将交换添加到EC2实例?


Answers:


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是什么意思,因为我从未见过参数列表中的and,of =。
アレックス

31
if表示“输入文件”,of表示“输出文件”,bs表示“块大小”,并且count是您要分配的块数……您可以阅读man命令页面以获得更多信息:linux.die.net/man/1/ dd
法比奥·巴蒂斯塔

4
dd命令行的意思是“从/ dev / zero复制到/var/swap.1.。通过读取1024个大小为1兆字节的块来做到这一点”。这是创建1GB大小为零的文件的快速方法。
尼尔森

3
足够旧,但是即使重新启动后我的交换内存仍使用0%,有什么帮助吗?
Girdhari Agrawal

3
如果要检查交换是否有效:$> free -m
herve

216

交换应该发生在实例存储(临时)磁盘上,而不是EBS设备上。交换将导致大量的IO,并会增加EBS的成本。EBS也比实例存储慢,并且某些类型的EC2实例免费提供实例存储。

通常将其挂载到/ mnt,但如果不运行

sudo mount /dev/xvda2 /mnt

要在此设备上创建交换文件,请对4GB交换文件执行以下操作

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实例。经过尝试无论如何,这似乎是正确的。
muttonUp 2014年

3
@alfetopito您可能可以在现有分区上创建文字交换文件,而不是将另一个分区添加为交换文件。一个很好的指南为CentOS 6 - digitalocean.com/community/tutorials/...
muttonUp

1
根据Amazon的说法,不能保证重启后保留实例存储,那么fstab不会失败吗?
2015年

42

应用了ajtrichards提到的步骤后,您可以使用以下命令检查您的Amazon Free tier实例是否正在使用交换

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 kB

免费掉期:1048572 kB

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 GB交换添加到实例:

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
David Levesque'2

可以确认这对t2.micro实例有效。我确实在@ / mnt / swap挖了我,因为我喜欢干净的根。
Mike Purcell

1
支持此答案,因为它最短并且可以完成任务。但是,应该添加swapfile chmod 600命令。
清醒

15

如果您对t2实例(t2.microt2.mediumt2.small),没有提供给您短暂的或实例存储。因此,您只需要创建一个交换即可,在EBS其中取决于您的用例可能不是一个好主意。否则,请遵循@David的回答,并在临时存储上创建交换,以避免支付EBS费用。

更多信息:http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html有一个表,显示每种实例类型获得的临时存储量。


1
可以确认这通常是一个坏主意。如果您的进程变得很糟糕(我已经有一个节点服务器,并且安装了python / celery),那么整个星期在您不知不觉中对EBS块进行读写时,都会产生大量的费用: -)
ZachM '16

3
根据aws.amazon.com/ebs/pricing,除了已配置的IPOS SSD(io1)外,所有EBS卷中都包含IO。您仅每GB。这可能是定价模型的最新变化-但这意味着,即使EBS的速度比真正的Instance Storace慢得多,读和写也不收取任何额外费用。
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似乎将为读写操作收费。
Valter Silva

2
@ValterHenrique您引用的文本仅适用于具有预配置IOPS的卷,但是您可以在几种不同的卷类型之间进行选择。如果您使用的是未配置IOPS的“普通”卷(例如称为“ gp2”的通用SSD卷类型),则不收取额外的读写操作费用。也许是一个比较好的链接: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是块大小计数是指以MB或GB为单位的大小

反之亦然

创建后,更改文件的权限:

 #chmod 600 /swapfile 

然后makewap文件:

 #mkswap /swapfile 

然后使用swapon命令启用交换文件:

 #swapon  /swapfile 

使用free命令检查是否启用了交换功能:

 #free -h
 #swapon -s

3

使用David的实例存储答案最初对我有用(在m5d.2xlarge上),但是在停止EC2实例并重新打开它之后,我无法再次进入该实例。

实例日志报告:“您处于紧急模式。登录后,键入“ 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


-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/


除了只是基本执行已接受的答案的shellscript外,我看不到该答案有什么作用。
尼尔斯·沃纳

我刚刚创建了一个Shell脚本,它节省了时间,所以将有2个步骤来创建交换,而不是运行5个命令,如果交换已经存在,它将显示交换已经存在。
Chetan kapoor '18年

3
究竟。我应该以root身份运行的shellscript。由某人在某个地方做出的,可能会更改或消失,恕不另行通知。全部保存5年前发布并接受的4-5命令行。
尼尔斯·沃纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.