Answers:
解决此问题的方法是向实例添加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
$> free -m
交换应该发生在实例存储(临时)磁盘上,而不是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
应用了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
您可以使用以下命令将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
/swapfile
。但是您也可以挂载另一个文件系统并在其中创建交换文件,例如/mnt/blah/swapfile
。
如果您对t2
实例(t2.micro
,t2.medium
,t2.small
),没有提供给您短暂的或实例存储。因此,您只需要创建一个交换即可,在EBS
其中取决于您的用例可能不是一个好主意。否则,请遵循@David的回答,并在临时存储上创建交换,以避免支付EBS费用。
更多信息:http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html有一个表,显示每种实例类型获得的临时存储量。
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似乎将为读写操作收费。
我们可以在任何服务器中添加交换空间
使用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
使用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
您可以使用以下脚本在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
有关完整的教程,您可以访问: