我在EC2上启动了几个服务器,但它们没有交换。
我是在做错什么,还是机器根本没有?
我在EC2上启动了几个服务器,但它们没有交换。
我是在做错什么,还是机器根本没有?
Answers:
没错,Ubuntu EC2 EBS映像未配置交换空间(至少适用于11.04)。“常规”实例类型的映像确实具有交换分区,尽管在我测试的映像上只有896 MB。
如果某些进程崩溃了,而您没有交换空间,则在OOM杀手in进来之前,服务器可能会停顿好一阵子,而使用交换,它只会变慢。因此,即使有足够的RAM,我也总是喜欢交换空间。这是您的选择:
创建一个EBS卷(RAM大小的2-4倍),将其附加到您的实例(我喜欢将其称为/ memory / dev / xvdm作为“内存”)sudo mkswap /dev/xvdm
,将其添加到fstab中sudo swapon -a
,然后您就可以开始了。我之前已经做过,并且工作正常,但是它可能比实例存储要慢一些,因为它通过网络传输。
或者,您可能可以对磁盘进行重新分区以添加交换分区,尽管这可能需要创建新的AMI。我无法在正在运行的实例中执行此操作,因为我无法卸载根文件系统,甚至无法访问磁盘设备(/ dev / xvda),只能访问分区(xvda1)。
或者您可以创建一个交换文件。这是我目前首选的解决方案。
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
sudo chmod 600 /var/swapfile &&
sudo mkswap /var/swapfile &&
echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
sudo swapon -a
做完了 :)我知道很多人对使用文件而不是分区感到不快,但作为紧急交换空间,它肯定能很好地工作。
交换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
华友世纪免费提供160.1GB!将您的交换放在那儿,当基于EBS的交换被错误地聚集时,忘记每台服务器100美元的超额费用。不幸的经验在这里聊天。
显然,在某些情况下,您看不到实例存储。
根据实例类型,您首先需要使用block-device-mapping选项将实例存储卷附加到实例。如果不这样做,您甚至可能看不到/ dev下的设备(根据如何在Amazon EC2中使用“实例存储卷”存储?)
注意:亚马逊已更改其定价政策,并且自2016年中开始不对I / O请求收费。出于历史原因,答案一直保留在此处,但是在EC2 EBS支持的实例上使用(或不使用)交换不会产生任何成本影响。
这是设计使然。默认情况下,在EC2 EBS支持的实例上,交换功能处于关闭状态,以避免不可预测的成本。
如果您有需要大量内存的应用程序(例如,在很小的实例上),那么它可能会在EBS卷上生成大量的I / O请求。亚马逊每100万个I / O请求收费0.10美元(请参阅http://aws.amazon.com/pricing/ebs/)。
在正常情况下,您不必为此担心。通常,即使在较小的实例上,I / O请求的成本也要几美元,如果是这样的话。因此,如果您知道实例大小合适并且该交换仅会很少使用,请继续启用它。但是要小心一些小实例。
如果启用交换,则可能需要关注使用情况报告。(可选)您还可以通过转到CloudWatch控制面板并为总账单金额创建新的警报来设置账单提醒。这样,您将立即收到通知,这是实例发生的奇怪事件。
检查/etc/fstab
文件,它们可能没有在您使用的映像中进行交换而设置。我认为有些人无需交换服务器即可运行,因为他们希望使用的内存永远不会超过总内存-交换会使一切变得非常缓慢。
但是,我总是对内存中的某些进程不断膨胀感到不安,因此,我建议您简单地设置一个交换驱动器并从正在运行的ec2实例中重新创建映像是您的明智之举。
zswap
在常规交换文件/磁盘之上提供压缩RAM缓存的wiki.archlinux.org/index.php/zswap。有关zram的更多信息,请参见cnx-software.com/2018/05/14/…。