我做错了还是机器根本没有?
#1 楼
没错,Ubuntu EC2 EBS映像未配置交换空间(至少适用于11.04)。 “常规”实例类型映像确实具有交换分区,尽管在我测试的映像上只有896 MB。在OOM杀手开始行动之前已经停了好一会儿,而通过交换,它只会变慢。因此,即使有足够的RAM,我也总是喜欢交换空间。您可以选择以下选项:创建一个EBS卷(RAM大小的2-4倍),并将其附加到您的实例(我喜欢将其称为/ dev / xvdm作为“内存” ),
sudo mkswap /dev/xvdm
,将其添加到fstab,sudo swapon -a
中,您就可以开始了。我之前已经做过,并且可以正常工作,但是它可能比实例存储要慢一些,因为它通过网络。创建一个新的AMI。我无法在正在运行的实例中执行此操作,因为无法卸载根文件系统,甚至无法访问磁盘设备(/ dev / xvda),只能访问分区(xvda1)。 > 或者您可以创建交换文件。现在,这是我首选的解决方案。 :)我知道很多人对使用文件而不是分区感到不快,但是它作为紧急交换空间肯定足够好。
评论
交换到EBS量可能会导致其他费用,如其他答案所示。不使用交换或交换到实例存储似乎是更好的解决方案。
– isuldor
13年1月7日在7:15
与EBS相比,使用实例存储是更好的选择。 EBS是一个网络文件系统,因此通过与其他所有东西相同的网络连接连接到EC2实例。实例存储已附加到承载该实例的硬件上(这就是为什么在停止和启动实例时它不会持久存在的原因)。 EBS唯一可以交换的选项是在使用实例存储所不附带的实例类型时,即t1.micro(鉴于它只有大约620MB RAM,可能确实确实需要紧急处理。交换)。
–ColtonCat
13年1月21日在23:38
bs = 1M已经是二进制表示法,因此count = 2048乘数应为count = 2000-如果我没有记错的话。
– ypocat
13年1月24日在22:28
如果您要使用2GiB,则1024 * 2048似乎是正确的。
– Jo Liss
2013年1月25日13:29
#2 楼
交换IMHO的最佳位置是实例存储。为什么? AWS不会向您收取实例存储上的I / O费用。此外,在许多情况下,实例存储的性能要比EBS高。只要确保您有一个脚本即可在停止实例的情况下重新创建交换文件。重新启动就可以了。为什么哦,为什么默认情况下它不存在?让我们找到实例存储。
root@domU-**-**-**-**-**-**:/var/log# fdisk -l
[...]
Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda2 doesn't contain a valid partition table
Hurray,160.1GB免费!将您的交换放置在那里,当基于EBS的交换被错误地聚集时,忘记每台服务器100美元的超额费用。不幸的经验是在这里讲话。
在某些情况下,您看不到实例存储。
根据实例类型,首先需要附加实例使用block-device-mapping选项将卷存储到实例。如果不这样做,您甚至可能看不到/ dev下的设备(按照如何在Amazon EC2中使用“实例存储卷”存储?)
评论
只是要指出,免费套餐上的t1.micro用户不能使用此选项。
– Reuben L.
2014年6月7日在7:26
#3 楼
注意:亚马逊已更改其定价政策,自2016年中起不对I / O请求收取费用。出于历史原因,将答案保留在此处,但是在EC2 EBS支持的实例上使用(或不使用)交换不会产生任何成本影响。这是设计使然。默认情况下,在EC2 EBS支持的实例上,交换功能处于关闭状态,以避免不可预测的费用。在您的EBS量上生成大量I / O请求。亚马逊每100万个I / O请求收取0.10美元(请参阅http://aws.amazon.com/pricing/ebs/)。在正常情况下,您不必担心;通常,即使在较小的实例上,I / O请求的成本也要几美元,如果是这样的话。因此,如果您知道自己的实例大小合适并且该交换仅会很少使用,请继续启用它。但是请小心小实例。
如果启用交换,则可能需要关注使用情况报告。 (可选)您还可以通过转到CloudWatch控制面板并为总账单金额创建新的警报来设置账单提醒。这样一来,您的实例就会发生奇怪的事情。马上通知您。
评论
因为最常见的实例类型使用SSD卷,所以这个答案对我来说有点误导或令人困惑。 aws.amazon.com/ec2/instance-types
–泰勒·埃德米斯顿(Taylor Edmiston)
16年8月8日在14:40
@tedmiston:的确,此答案不再适用。我已经进行了调整,以反映新的现实,但是对于I / O请求基本上是免费的,因此启用(或不启用)交换现在可以在纯技术基础上进行。
–圭·安布罗斯(Gui Ambros)
16年8月9日,0:04
从问题上来看,这实际上可以回答问题。
–volvox
19年12月12日下午3:51
#4 楼
检查/etc/fstab
文件,它们可能已设置为在您使用的映像中没有交换。我认为有些人不需要交换服务器就可以运行,因为他们希望永远不要使用超过总内存的内存-交换会使一切变得非常缓慢。因此,我建议您仅设置一个交换驱动器并从正在运行的ec2实例中重新创建映像是明智的选择。评论
偶尔的交换不会使系统变慢。
–laebshade
2011年6月13日,0:53
#5 楼
在swap
图像中运行EC2
的一种简单解决方案是在swap
中使用lz4
在ram
中运行用zram-init
压缩的systemd
。服务脚本可用于
openrc
和ram
。此解决方案不会使
host
脱离q4312079q:评论
很有创意,但是将您的RAM用作实际RAM比将其用作内存文件系统进行交换更有意义吗? (主要在内存不足时使用)减少应用程序创建交换的可用内存量似乎违反直觉。
– HBruijn
18年8月24日在8:25
有趣的答案,但我认为使用EBS /实例存储可能是更好的通用解决方案。我有一个t2.nano,具有512MB RAM和EBS上的512MB交换,效果很好。
– Tim
18年8月24日在8:40
显然,这确实从主机(EC2实例)中获取了RAM-RAM又从哪里来?这种方法的唯一好处是压缩了总RAM的一部分,但是它不提供使用SSD作为交换功能。您可以改用zswap,它在常规交换文件/磁盘之上提供压缩的RAM缓存:wiki.archlinux.org/index.php/zswap。有关zram的更多信息,请参见cnx-software.com/2018/05/14/…。
– RichVel
19年2月19日在6:19
评论
我也想知道,但是我只是建立了一个EBS实例,将其格式化为swap,然后交换/ dev / sdg ...在Linux系统上使用SSD驱动器而不在SSD驱动器上设置交换也是典型的情况。主要是因为有些人偏执狂,如果一直钻探同一组扇区,将会对SSD的存储寿命产生负面影响。
什么AMI和哪个EC2实例大小。 AMI需要配置为使用交换分区,并且实例必须在启动时添加实例。
如果可能的话,我建议不要在EC2上使用交换功能,除非您有99%的把握不必使用它(即仅在紧急情况下才使用)。当我们在某些EC2实例上禁用交换时,我们的每月EBS IO成本可能减半。仅用我的两分钱就可以为您节省两分钱-是的,这很糟糕,我很抱歉,我会躲在一个角落里;)
您也可以查看此步骤docs.aws.amazon.com/AWSEC2/latest/UserGuide / ...