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

我目前正在运行一个ec2微型实例,我发现实例偶尔会耗尽内存。

除了使用更大的实例大小,还有什么可以做的?

解决此问题的方法是将swappaging空间添加到实例。

分页工作是通过在硬盘上创build一个区域并将其用于额外的内存来实现的,这个内存比普通的内存慢得多,但是更多的是可用的。

要将这个额外的空间添加到您的实例中,请input:

 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也比实例存储更慢,实例存储免费提供某些types的EC2实例 。

它通常会挂载到/ mnt,但如果不运行

 sudo mount /dev/xvda2 /mnt 

然后在这个设备上创build一个交换文件,为4GB交换文件做以下操作

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

确保没有其他用户可以查看交换文件

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

Make和Flag作为交换

 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 

在应用ajtrichards提到的步骤之后,您可以使用此命令检查您的亚马逊免费层实例是否正在使用交换

 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 kB

SwapFree: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 

您可以使用以下命令将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 

如果你使用t2实例( t2.microt2.mediumt2.small ),那么就不会有临时或实例存储。 所以你需要在EBS创build交换,这取决于你的用例可能或不可能是一个好主意。 否则,请按照@David的回答,在临时存储上创build交换,以避免支付EBS费用。

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

您可以使用以下步骤创build交换空间在这里我们在/home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    这里计数是交换空间的千字节数

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    input:
    /home/swapfile1 swap swap defaults 0 0

  4. 跑:
    swapon -a

尝试交换空间 http://pqxx.org/development/swapspace/

大多数发行版都打包了。

在EC2上,您可能需要将“swappath”更改为/ mnt或high-iops磁盘。

通过深入研究这个主题,我发现了一个有趣的教程 它重复了大家在这里说的😌


https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04