Amazon EC2 t1.micro + nginx + php-fpm = 有时非常慢

Amazon EC2 t1.micro + nginx + php-fpm = 有时非常慢

首先谈谈基础设施:

我们已经将我们的一个后端/管理服务器迁移到亚马逊。此服务器上的应用程序仅偶尔使用(最多 10 个并行用户)。我们正在使用运行 Gentoo 的 t1.micro 实例。作为 Web 服务器,我们将 nginx 与 PHP-FPM 结合使用。问题是有时服务器速度非常慢,这意味着页面需要 10-20 秒才能加载(在我的本地开发环境中最多 2 秒,这些页面很重……80mb+)。我尝试分析并重现错误,但只发现内存没问题(270mb 可用),而 CPU 负载为 100%

配置:

nginx 有 2 个工作进程和最多 1024 个连接。

PHP-FPM(我删除了评论)

error_log = /var/log/php-fpm.log

...

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

[www]

listen = 127.0.0.1:9000

user = www
group = www

pm = dynamic

pm.max_children = 8

pm.start_servers = 2

pm.min_spare_servers = 2

pm.max_spare_servers = 4

pm.max_requests = 100

我希望有人知道该怎么做:)

答案1

看一眼http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/concepts_micro_instances.html您将在其中找到有关 t1.micro 的详细信息以及它与其他实例类型(如 m1.small)的比较。这将有助于理解实例的行为。

简而言之:一旦您超过“短时间爆发”阶段,您将获得大量的 CPU“st”(显示为top),这会使一切变慢。

答案2

EC2 微型实例提供短暂的 CPU 突发,而不是恒定的 CPU 功率。这是预期的行为。微型实例最多只能提供几分钟的全 CPU 功率,然后将其限制回大约 5-10% 的容量。如果你查看,你top会看到“st”的值很高,这是从虚拟机管理程序窃取的 CPU(即你不能使用/配置精简的 CPU)。

该系列的实例提供少量一致的 CPU 资源,并允许您在有额外周期可用时爆发 CPU 容量。它们非常适合吞吐量较低的应用程序和定期消耗大量计算周期的网站

-亚马逊

相关内容