我在使用 AWS 时遇到了问题。我使用的是按以下链接创建的 Elastic Container Servicehttps://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html 实例类型为 t2.xlarge (https://aws.amazon.com/ec2/instance-types/)。容器内我配置了 nginx + php7.0-fpm。为确保万无一失,我还使用 apache2 而不是 nginx 测试了相同的东西。其他一切都一样。
我一直在使用 loader.io (https://loader.io/) 和 ApacheBench (https://en.wikipedia.org/wiki/ApacheBench) 以进行负载测试。
正如您在实例类型列表中看到的,我使用的实例应该能够接收一些负载。但是当我测试它时,结果有点令人震惊。该机器确实在 PHP Hello World 程序上执行了 1500 次请求/秒。所以基本上它是整个文件中的一个简单的 echo 命令。我设法在我的个人电脑(MacBook Pro 13 Mid 2014)上获得了相同的结果,根据可用的规格,它应该比 t2.xlarge 更强大。此外,对于 AWS 实例,Docker 容器和其中的服务的几乎所有资源都是可用的,而在我的 Mac 上,一堆其他“重型”软件正在并行运行。
在网上我发现了一些例子,人们使用比我更小的实例得到了与我类似的结果。(例如https://stackoverflow.com/questions/32495636/is-there-any-limitation-on-ec2-machine-or-network)
我想知道你们中有人遇到过这样的事情吗?这是正常现象吗?我能得到更好的结果吗?
在此链接上https://www.dropbox.com/s/22antrony35fhq0/Archive.zip?dl=0您可以下载我的 fpm 和 nginx(和 apache)配置。
希望可以有人帮帮我。
编辑:
我发现,使用没有 ECS 的同一台 EC2 机器,与在 ECS 中使用相比,req/s 可以增加约 10 倍。
有人知道这件事吗? Docker 会降低那么多性能吗? 或者可能是由于 AWS 的实施不当?
答案1
t2 实例受到限制(具有爆发能力来处理峰值) - 对此有一些讨论这里,因此您可能需要研究另一种实例类型(例如 c5.large)或 t2 无限制模式。
确保你已经拥有php 的 opcache在您的 php.ini 中启用,并且您使用的是 php7+,因为这对“hello world”类型示例有很大影响。还请记住,它们通常不是一个很好的基准,谷歌上有很多很好的基准测试脚本,可以更好地衡量实际性能。