1

我正在使用“ab”工具测试我的 Apache 和 PHP 设置(Ubuntu 上的默认配置)。通过 2 个并发连接,我得到了相当令人满意的结果:

ab -k -n 1000 -c 2 http://localserver/page.php

Requests per second:    184.81 [#/sec] (mean)
Time per request:       10.822 [ms] (mean)
Time per request:       5.411 [ms] (mean, across all concurrent requests)

鉴于它是一个内存不足的虚拟机,没关系。现在我想测试一个更现实的场景:请求分布在同时连接的 100 个用户(阅读:连接)中:

ab -k -n 1000 -c 100 http://localserver/page.php

Requests per second:    60.22 [#/sec] (mean)
Time per request:       1660.678 [ms] (mean)
Time per request:       16.607 [ms] (mean, across all concurrent requests)

这要糟糕得多。虽然每秒请求的总数没有显着下降(184 到 60 #/秒),但从用户角度来看,每个请求的时间急剧上升(平均从 10 毫秒到超过 1.6 秒)。最长的请求花费了 8 秒以上,在测试期间使用 Web 浏览器手动连接到本地服务器花费了将近 10 秒。

可能是什么原因以及如何将并发性能优化到可接受的水平?

(我使用的是 Ubuntu Linux Server 附带的默认配置。)

4

1 回答 1

3

首先,您需要查看每个脚本消耗的内存量,即。memory_limit 然后除以虚拟机内存。这应该是您可以同时处理的连接数,而不会耗尽内存,因此服务器开始抖动。

您将获得非常少的连接。所以你需要

  • 增加记忆力
  • 减少 memory_limit
  • 使每个连接更快地完成

下一步是查看是否有任何数据库查询花费的时间比预期的要长,我通常会从 mysql-slow.log 开始查看超过 0.5 秒的查询 如果可以的话,还要消除不使用索引的查询。

接下来安装一个像collectd这样的监控工具,看看是否有足够的CPU可用。

从商业角度来看,这取决于这是一个新的网站/系统还是现有的东西。如果它是新的并且增长是巨大的,那么你需要在硬件上超支一段时间,一个无法工作或在流量下崩溃的系统会很快侵蚀对企业的信任。最重要的是,如果托管费用低于每月 1000 美元,通常不值得进行大量优化。如果这负担不起,那么您可能需要回到您的商业模式。

于 2013-10-31T19:22:47.597 回答