ajt*_*rds 281 out-of-memory amazon-ec2 amazon-web-services
我目前正在运行一个ec2微实例,我发现实例偶尔耗尽内存.
除了使用更大的实例大小外,还能做些什么呢?
ajt*_*rds 557
解决此问题的方法是向实例添加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
Run Code Online (Sandbox Code Playgroud)
如果您需要超过1024,那么将其更改为更高的值.
要在重新启动后默认启用它,请将此行添加到/ etc/fstab:
/var/swap.1 swap swap defaults 0 0
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 211
交换应该在实例存储(临时)磁盘上进行,而不是在EBS设备上进行.交换将导致大量IO并且将增加EBS的成本.EBS也比Instance Store慢,而Instance Store可以免费提供某些类型的EC2实例.
它通常会挂载到/ mnt,但如果没有运行
sudo mount /dev/xvda2 /mnt
Run Code Online (Sandbox Code Playgroud)
然后,要在此设备上创建交换文件,请执行以下4GB交换文件
sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096
Run Code Online (Sandbox Code Playgroud)
确保没有其他用户可以查看交换文件
sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile
Run Code Online (Sandbox Code Playgroud)
Make和Flag作为交换
sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile
Run Code Online (Sandbox Code Playgroud)
添加/确保以下内容位于/ etc/fstab中
/dev/xvda2 /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
/mnt/swapfile swap swap defaults 0 0
Run Code Online (Sandbox Code Playgroud)
最后启用交换
sudo swapon -a
Run Code Online (Sandbox Code Playgroud)
Him*_*der 42
应用ajtrichards提到的步骤后,您可以使用此命令检查您的amazon免费层实例是否正在使用swap
cat /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Dav*_*que 38
您可以使用以下命令为实例添加1 GB交换:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile
Run Code Online (Sandbox Code Playgroud)
要在重新启动后默认启用它,请将此行添加到/etc/fstab
:
/swapfile swap swap defaults 0 0
Run Code Online (Sandbox Code Playgroud)
Ali*_*Ali 15
如果您对t2
实例(t2.micro
,t2.medium
,t2.small
),没有提供给您短暂的或实例存储.所以你需要创建你的交换EBS
,根据你的用例,可能或可能不是一个好主意.否则,请关注@David的回答,并在短暂存储上创建交换,以避免支付EBS费用.
更多信息:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html有一个表格,显示您为每种实例类型获得的短暂存储空间.
您可以使用以下步骤创建交换空间这里我们创建交换 /home/
dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
这里count是交换空间的千字节数
mkswap /home/swapfile1
vi /etc/fstab
进入:
/home/swapfile1 swap swap defaults 0 0
跑:
swapon -a
小智 6
使用 David 的实例存储答案最初对我有用(在 m5d.2xlarge 上),但是,在停止 EC2 实例并将其重新打开后,我无法再次通过 ssh 连接到该实例。
实例日志报告:“您处于紧急模式。登录后,输入“journalctl -xb”查看系统日志,“systemctl reboot”重启,“systemctl default”或“exit”启动进入默认模式。按回车用于维护”
相反,我按照此链接中的 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
127429 次 |
最近记录: |