EC2 服务器比本地机器慢

EC2 服务器比本地机器慢

我们一直在尝试对使用大量使用 mongodb 的 python 编写的 webapp 进行一些性能基准测试,并发现了以下情况。

我们尝试使用配备 8 个 ecu 和 15 GB 内存的第一代超大型 ec2 服务器

  • ec2服务器上的python比本地机器慢至少30%
  • 磁盘 I/O 极慢。mongostat 和 iostat 结果显示磁盘写入在 1MBpS 左右
  • 程序本身的运行速度比本地机器慢得多

我们无法弄清楚为什么会发生这种情况。我们讨论的本地机器有 8GB RAM 和 i5 处理器。

更新 我们测试 Python 的方式是运行一个需要 10 秒才能完成的循环,其中没有磁盘读写。每次试验至少要多花 30% 的时间。

这与此有关吗?

https://forums.aws.amazon.com/thread.jspa?messageID=66988

答案1

EC2 机器速度慢的原因有很多。磁盘不直接连接到实例。相反,ebs 卷是大型网络磁盘,您写入的任何内容都会通过网络发送到这些磁盘。现在通常延迟相当低,但当然,与直接连接到您的机器的东西相比,它会出现慢的。

它是一台虚拟机。无论你做什么,它都必须与其他机器竞争 CPU 周期。如果你使用的是 Linux,请运行 top 并检查 CPU 窃取百分比。非零数字表示 CPU 竞争激烈。无论如何,对于同类处理器,虚拟 CPU 的速度都不如实际 CPU。

另一个个人观察是运气在 EC2 中起着重要作用(是的!)。有时你会得到一个较旧的硬件,它的速度并不那么快。另一个个人经验是,有时你会得到 amd opteron 处理器,它通常不如基于英特尔的处理器快。我并不是说 AMD 处理器不好,但在这种情况下,英特尔处理器似乎运行得更快。也许它们是新一代的。

我曾经在 EC2 上维护过 mongo,所以我完全理解你的痛苦。我建议尽量将尽可能多的数据保存在内存中。一般来说,EC2 实际上并不是为垂直扩展而设计的。拥有大量较小的实例来划分工作比拥有一个大型实例独自完成所有工作更有好处。

答案2

使用软件将 EBS 卷备份到 RAID0 后,我获得了非常好的结果——读取速度提高了 50% 以上,写入速度略有提高。我们有一个在 AWS 上完全没用的应用程序,直到我们这样做了,它救了我们一命。

此外,您的 IO 会随着一天中的时间以及其他客户使用该集群/机器的频率而波动。我记得,AWS 的细则保证标准 EBS 卷上的 IOPS 不超过 100,尽管大多数情况下您会得到更多。我的手机可能比 100 IOPS 更快。如果这些波动不可接受,请使用预配置 IOPS 创建您的 EBS 卷。这稍微贵一点,但允许您设置应用程序可以承受的最小吞吐量,并保证无论其他 AWS 客户在做什么,您都能获得它。

对于这一点:

“ec2 服务器上的 python 至少比本地机器慢 30%”

这也可能与发行版有关,或特定于您的应用。您没有确切说明“慢 30%”是什么意思。如果您的测试涉及磁盘访问,请参见上文(我保证,这很有帮助)。如果没有,您可能需要提供有关您正在测试的内容的更多信息。

答案3

如果您确实关心磁盘 io,AWS 提供预配置 IO EBS 卷和 EBS 优化实例。

使用 Provisioned IO,您可以指定 EBS 卷所需的平均 IO 性能。普通 EBS 卷的值为 100,您最多可以指定 2000。此外,您还可以从多个 Provisioned IO EBS 卷设置软件 RAID 阵列以获得更高的吞吐量。 http://aws.amazon.com/about-aws/whats-new/2012/07/31/announcing-provisioned-iops-for-amazon-ebs/

此外,EBS 优化图像为 EBS 提供了更快的专用连接,在 m1.large、m1.xlarge 和 m2.4xlarge 上的速度为 500 和 1000 Mbps。 http://aws.amazon.com/ebs/

您还可以检查附加了 SSD 驱动器的高 io 实例:

高 I/O 四倍超大型实例 60.5 GiB 内存 35 个 EC2 计算单元(16 个虚拟核心*) 2 个基于 SSD 的卷,每个卷具有 1024 GB 的实例存储 64 位平台 I/O 性能:非常高(10 Gigabit 以太网) 存储 I/O 性能:非常高*** EBS 优化可用:否** API 名称:hi1.4xlarge

相关内容