我们一直在试图做一些性能基准testing,我们的webapp使用python编写,大量使用mongodb,我们发现了以下内容。
我们尝试使用具有8个ecu和15 GB内存的第一代超大型ec2服务器
我们还没有弄清楚为什么会发生这一切。 我们所说的本地机器有8GB RAM和i5处理器。
更新我们testingpython的方式是我们运行了一个循环,需要10秒才能完成,没有磁盘读或写。 每次审判至less花费了30%的时间。
这是否与此有关?
https://forums.aws.amazon.com/thread.jspa?messageID=66988
EC2机器有很多因素会变慢。 磁盘不直接附加到实例。 相反,ebs卷是大型的networking磁盘,无论你写给他们的是通过networking发送到这些磁盘。 现在通常情况下,延迟是相当低的,但是,与直接连接到您的机器的东西相比,它会显得很慢。
这是一个虚拟机。 无论你做什么,都必须与其他机器竞争CPU周期。 如果你正在使用Linux,请运行最上面的代码并检查CPU的占用率。 一个非零的数字表示CPU的竞争很激烈。 在任何情况下,对于可比的处理器而言,虚拟CPU的速度都不如实际的CPU速度。
另一个个人的观察是运气在EC2中扮演着重要的angular色(是的!)。 有时你会得到一个更老的硬件,但速度并不快。 另一个个人的经验是,有时候你会得到一些opteron处理器,而这些处理器通常不如英特尔那么快。 我并不是说AMD处理器不好,但看起来在这种情况下,英特尔的处理速度更快。 也许他们是新一代。
在EC2上保持了mongo,我完全理解你的痛苦。 我build议尽量保持尽可能多的数据在内存中。 一般来说,EC2实际上并不是为垂直缩放devise的。 有很多较小的实例分工是有益的,然后有一个单独做事情的巨大实例。
我用软件突袭EBS卷到RAID0的结果是非常好的 – 读取速度略高于50%,写入略less。 我们有一个在AWS上完全没用的应用程序,直到我们这样做,它节省了我们的屁股。
此外,您的IO将随着一天中的时间波动,以及其他客户使用该群集/机器的数量。 据我所知,AWS精细打印在标准EBS卷上保证不会超过100个iops,但大部分时间你会得到更多。 我的手机可能比100个iops快。 如果这些波动不可接受,请使用预设的iops创build您的EBS卷。 这有点贵,但是可以设置应用程序可以使用的最小吞吐量,并保证无论其他AWS客户在做什么,都可以得到它。
至于这个:
“ec2服务器上的python至less比本地机器慢30%”
这也可能与发行版相关,或者与您的应用程序相关。 你没有说“你慢”30%的意思。 如果您的testing涉及磁盘访问,请参阅上文(承诺,它有帮助。)如果不是,您可能需要提供更多关于您正在testing的信息。
如果您真的关心磁盘io,AWS会提供预configurationIO EBS卷和EBS优化实例。
使用预置IO,您可以从EBS卷中指定所需的平均IO性能。 正常EBS卷的值为100,最多可指定2000.另外,您可以从多个预置IO EBS卷中设置软件RAIDarrays,以获得更高的吞吐量。 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 Gb以太网)存储I / O性能:非常高*** EBS优化可用:否** API名称:hi1.4xlarge