使用 JMeter 进行 Nginx + PHP-FPM 基准测试 - Spikes

使用 JMeter 进行 Nginx + PHP-FPM 基准测试 - Spikes

设置是

  • EC2 微型实例
  • 带有 FPM 的 Nginx 1.0.0.5
  • 带有 CGI 的 PHP 5.2.17
  • 应用程序连接到 RDS 上的 MySQL
  • 用于监控的 Collectd

JMeter 在同一 EC2 区域的其他服务器上使用(因此延迟不是问题)。问题出在 Collectd 生成的图表上,结果非常尖锐。

例如,200k 个请求耗时 20 分钟,而模式是 1 分钟内有 1k 个请求,然后 2 分钟内有相当平稳的(甚至不到 100 个)请求,重复。

这里唯一达到极限的资源是 CPU,达到了 100%。其余资源仍未得到充分利用。

哎呀,我以前尝试过静态页面并得到几乎相同的模式:

巨大的尖峰 - 平坦 - 平坦 - 巨大的尖峰

我在这里忽略了什么?我已经处理了一些事情:

  • rlimit 设置为非常高
  • nginx 工作连接设置为 8192
  • PHP-FPM 最大子级设置为 140

下面是其中一次运行的图表(总共 200,000 个请求)

20 万个请求

谢谢。

答案1

微型 EC2 实例旨在:

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

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instance-types.html

您的负载是 CPU 重度负载,因此实例正在使用突发容量,其缺点是此后 CPU 会出现下降。您的指标与 Huan Liu 所做的指标相符:

http://huanliu.wordpress.com/2010/09/10/amazon-ec2-micro-instances-deeper-dive/

您应该(通过计量)从以下选项中选择一个更好的高 CPU 使用率替代方案:EC2 实例类型列表考虑应用程序的其他方面,例如 I/O 和内存使用情况。

答案2

微型 ec2 实例具有突发容量。因此,如果 CPU 一直处于 100% 状态,则微型实例将在几秒钟内获得额外的 CPU 能力。

这可能是导致峰值的原因。CPU 功率突然增加几秒钟。

相关内容