为什么 EC2 ubuntu 镜像没有交换?

为什么 EC2 ubuntu 镜像没有交换?

我在 EC2 上启动了几个服务器,但它们没有交换。

是我做错了什么还是机器根本没有?

答案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)。

  • 或者您可以创建一个交换文件。这是我目前首选的解决方案。

    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
    

    完成。:) 我知道很多人对于使用文件而不是分区感到不舒服,但它作为紧急交换空间确实足够好。

答案2

笔记:亚马逊已经改变了他们的定价政策,并且自 2016 年中期起不再收取 I/O 请求费用。由于历史原因,答案保留在这里,但在 EC2 EBS 支持的实例上使用(或不使用)交换不会产生任何成本影响。


这是设计使然。EC2 EBS 支持的实例默认关闭交换,以避免不可预测的成本。

如果您有一个内存占用大的应用程序出现问题(例如,在一个很小的实例上),它会在您的 EBS 卷上生成大量 I/O 请求。亚马逊每 100 万个 I/O 请求收费 0.10 美元(请参阅http://aws.amazon.com/pricing/ebs/

在正常情况下,你不必担心;通常 I/O 请求的成本(即使在较小的实例上)也只有几美元。因此,如果你知道你有一个适当大小的实例如果交换不常使用,请继续启用它。但要小心小实例。

如果您启用了交换,您可能需要关注使用情况报告。您也可以选择通过以下方式设置账单提醒:CloudWatch 控制面板并为总账单金额创建新的警报。这样,如果您的实例出现异常,您将立即收到通知。

答案3

我认为交换的最佳位置是实例存储。为什么?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 美元的超额费用就不用管了。这是一次不幸的经历。

显然,在某些情况下您看不到实例存储。

根据实例类型,您首先需要使用块设备映射选项将实例存储卷附加到实例。如果不这样做,您可能甚至看不到 /dev 下的设备(根据如何在 Amazon EC2 中使用“实例存储卷”存储?

答案4

在图像swap中运行的一个简单解决方案是使用压缩文件运行EC2swaplz4ramzram-init

这个解决方案确实不是带走:ramhost

在此处输入图片描述

相关内容