Amazon EC2 t1.micro + nginx + php-fpm = somtimes dead slow

首先是基础设施:

我们已经将我们的后端/pipe理服务器之一迁移到亚马逊。 这个服务器上的应用程序只是偶尔使用(最多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 

我希望有人有一个线索怎么办:)

看一下http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/concepts_micro_instances.html ,您将在其中find有关t1.micro的详细信息,以及它如何与其他实例types(如m1.small)相干。 这将有助于了解实例的行为。

简而言之:只要你超过了“短暂的爆发”阶段,你将会得到大量的cpu'st'(用top ),这会放慢一切。

EC2微型实例提供CPU短暂的突发,而不是恒定的CPU功率。 这是预期的行为。 微型实例最多只能提供几分钟的全部CPU能力,然后将其限制回到约5-10%的容量。 如果你看top你会看到'st'的高值,这是来自pipe理程序(你不能使用/被精简configuration的IE CPU)的CPU窃取。

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

-Amazon