【问题标题】:Optimizing Concurrency Performance of Apache and PHP优化 Apache 和 PHP 的并发性能
【发布时间】:2013-11-11 19:10:36
【问题描述】:

我正在使用“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 服务器附带的默认配置。)

【问题讨论】:

  • 这不首先取决于本地脚本正在执行什么吗?你可以使用 memcache(d) 吗?
  • 本地脚本只执行了一堆简单的回显语句。我故意不包括任何数据库工作。
  • 如果是低内存虚拟机,为什么不使用 nginx、lighttp 或其他的?
  • 你在什么平台上运行这个?除非它是空闲的测试机器、您控制的专用服务器或使用可突发资源的 VM 实例,否则您的测试几乎没有意义,因为它们几乎完全取决于使用该硬件的其他设备当时。如果这是在 AWS 微实例之类的东西上运行 [我怀疑它是],那么除了可怕的性能之外,你不应该期待任何其他东西。
  • @Sammitch 它在 ~3GHz 的 Intel QuadCore 上的本地 VirtualBox 实例上运行。 VM 分配有 256 MB RAM 和 1 个 CPU。主机或多或少处于空闲状态,拥有 8 GB RAM。

标签: php apache apachebench


【解决方案1】:

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

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

  • 增加内存
  • 减少 memory_limit
  • 让每个连接更快完成

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2013-01-19
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多