318

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

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

4

10 回答 10

607

解决此问题的方法是向实例添加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
于 2013-06-18T16:17:42.987 回答
225

交换应在实例存储(临时)磁盘上进行,而不是在 EBS 设备上进行。Swaping会造成大量的IO,会增加EBS的成本。EBS 也比 Instance Store 慢,并且 Instance Store 随某些类型的 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
于 2014-03-07T10:39:17.007 回答
43

您可以使用以下命令向您的实例添加 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
于 2013-06-18T16:56:52.147 回答
43

应用 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

交换总数: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
于 2013-10-29T21:24:14.273 回答
16

如果您在t2实例 ( t2.micro, t2.medium, t2.small) 上,则没有可用的临时或实例存储。所以你只需要创建你的交换,EBS这取决于你的用例可能是也可能不是一个好主意。否则请遵循@David 的回答,并在临时存储上创建交换以避免支付 EBS 成本。

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

于 2015-02-21T11:58:48.343 回答
9

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

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

  2. mkswap /home/swapfile1

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

  4. 跑:
    swapon -a

于 2014-05-28T11:18:07.630 回答
7

最初使用 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
于 2019-02-26T11:46:27.090 回答
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是指以MB 或 GB 为单位的大小

我们可以反之亦然

创建后更改文件的权限:

 #chmod 600 /swapfile 

然后makeswap文件:

 #mkswap /swapfile 

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

 #swapon  /swapfile 

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

 #free -h
 #swapon -s
于 2018-01-16T14:35:25.540 回答
1

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

大多数发行版都将其打包。

在 EC2 上,您可能希望将“交换路径”更改为 /mnt 或高 iops 磁盘。

于 2014-02-07T12:49:53.147 回答
-5

您可以使用以下脚本在 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/

于 2018-08-01T08:51:26.893 回答