【问题标题】:How to increase PHP over HTML speed?如何提高 PHP 超过 HTML 的速度?
【发布时间】:2010-12-02 14:23:21
【问题描述】:

我有一个 PHP 文件,它从 Memcached 获取 HTML 并将其提供给用户。当我这样测试时:

ab -n 1000 -c 100 http://website.com/test.php

它每秒执行 22 个请求。

但是当我将相同的 HTML 放入一个 HTML 文件并进行此测试时:

ab -n 1000 -c 100 http://website.com/test.html

我每秒收到大约 4500 个请求。

我需要坚持使用 PHP,因为第一次我需要生成 HTML,而下一次我只是从 Memcached 获取生成的 HTML。此外,我显示的 HTML 对于每个其他用户都是不同的(基于 $_GET ['user_id'] 值识别)。有没有办法让RPS更高?更接近于提供纯 HTML?

我使用lighttpd 作为网络服务器。

【问题讨论】:

  • 您确定这些响应来自缓存吗?
  • “页面的$_GET['user_id']related 部分需要多少”PHP 以及“提高速度有多重要”?您是否还测试了仅服务于 memcache 部分 - 仅此而已?当您进行ab -c 100 测试时,运行了多少个 PHP 进程/后端?
  • @VolkerK 我不明白你所说的“多少,多么重要”部分是什么意思。你能给我解释一下吗?当我运行 ab -c 100 时,我有 10 个 lighttpd 进程和 100 个 php-cgi 进程。
  • 在对您之前的问题 (stackoverflow.com/questions/1496987/…) 的评论中,您说“因为我上次发布此应用时有 10k 个并发请求”,我只是想知道您愿意做什么做以提高性能。也许(只是也许,我认为我们还没有;-))甚至像从 php 切换到 lighthttpd 的 C 插件?
  • @VolkerK 这是 C 插件的一个想法。所以你认为这是php解析器的问题吗?我使用 APC 操作码缓存。它应该有帮助。也许是糟糕的 PHP、Memcached 甚至 Lighttpd 配置?如何诊断?

标签: php html performance memcached scalability


【解决方案1】:

思路(待续....):
首先,我将测试问题是否由并发触发或显着恶化。通过您的-n 1000 -c 100 测试,您的比率为 22/4500。 -n 1000 -c 10-n 1000 -c 1 呢?

然后我会再试一次 + 跟踪内存消耗、磁盘 I/O 和 CPU 使用率。这些明显是限制因素吗?

然后我会测试简单的 PHP 脚本:

  • 一个空脚本
  • 根本没有脚本,但是test.html的内容复制到test.php
  • 只提供一个小的 Memcached 项目。尽可能简单的脚本,构造Memchached对象,得到一个项目,不测试,不过期,不添加,只有echo $mc->get(string $key)

这些与 test.html 相比如何?

编辑:

我们以Web Server Performance Comparison: LiteSpeed 2.0 VS 作为比较点。基准测试是“为”另一个“竞争”网络服务器产品执行的,但目前让我们假设它们没有(太)有偏见;-)

他们有一个

  • CPU:单个 Intel Xeon 2.4 GHz/533 MHz FSB/512 KB L2 高速缓存
  • 内存:256 MB ECC PC2700
  • 硬盘:36 GB 10K RPM SCSI 驱动器希捷 ST336607LW
  • NIC:板载 Intel PRO/1000 千兆适配器

lighthttpd 每秒处理 15475 个 100 字节的文件,脚本 helloworld.php 每秒 1593 次和 phpinfo.php 每秒 399 次(均为 FastCGI)。这是〜1:10(hello world)或1:40(phpinfo)的比率。 “你”的比例是 22:4500 ~ 1:200。甚至更奇怪的是,当脚本更改时它不会改变。您的“真实”脚本或空 PHP 脚本,无论始终是 1:22。这大大提高了“奇怪因素”(即使测试并不相同)。

首先,我会仔细检查 PHP 编译时是否支持 FastCGI,请参阅 http://www.fastcgi.com/docs/faq.html#PHP。 然后,我将使用测试中提到的简单 C/C++ FastCGI 程序测试“我的”lighthttpd,这是一个真正简单的“hello world”。 http://www.fastcgi.com/devkit/doc/fastcgi-prog-guide/ch2c.htm#4263 有一个例子。如果这可以“很好”扩展,即比您的 PHP FastCGI 好得多,我会尝试使用“几乎运行”的 PHP 版本,即使用 --disable-all 编译,并且只有那些模块(重新)激活和内置是必要的启动 PHP 并让它打印“hello world”。也使用默认的php.ini。这会改变什么吗?

【讨论】:

  • 感谢您的回答。以下是结果:“-c 10”给出 22 RPS,“-c 1”都给出 21 RPS。 CPU 使用率最高。 60% 和最大内存。 300 MB 从 2 GB 可用。我不知道如何测量磁盘 i/o 的使用情况。在列出的所有 4 个测试场景中,我也获得了 22 RPS。
  • 感谢您的帮助。你是对的:这似乎是 php/lighttpd 的问题。因此,当您在我重新编译 php 之前编写时,我想检查它是否实际上是用 fastcgi 编译的。如何检查?
  • 在 PHP 5.3 中,FastCGI 始终处于启用状态且无法禁用。使用 -v 参数从 shell 调用您的 php 可执行文件,例如php-cgi -v。如果启用了 fastcgi 支持,它将打印 cgi-fcgi,否则仅打印 cgi
  • @VolkerK 正如你所写,我仔细研究了 fcgi。发生它未启用但在我的系统上可用。所以我用这个:cyberciti.biz/tips/lighttpd-php-fastcgi-configuration.html 来更新配置。接下来它使用/etc/php.ini 而不是/home/domain.com/httpdoc/php.ini。所以我首先更新了第二个。接下来我检查了它是否有效。它奏效了。我已经测试了 test.php,现在有 1500 RPS。它快 68 倍。非常非常感谢你!太好了。我很高兴也很高兴能得到专家的帮助。问候,祝你有美好的一天!!!
  • 在 '-c 1000 -n 10000' 我有 3000 RPS :)
【解决方案2】:

比脚本还快?

尝试编写纯 HTML 文件并提供这些文件。并制作一个“更新程序”脚本,不时更新您的 HTML 文件,或者如果您真的需要这样的速度,可以在某个事件上更新。

尝试在某些地方使用SSI,看看效果如何 (http://httpd.apache.org/docs/1.3/howto/ssi.html)。

尝试使用 Eaccelerator (http://eaccelerator.net/) 或 APC (http://www.php.net/apc/) 来加速脚本解析器,但它不会在 PHP5 上产生奇迹...

确保物理服务器有足够的可用资源(快速硬盘、大量 RAM、多处理器)。

您的脚本比 HTML 页面慢是很正常的:) 提供 HTML 页面意味着一个简单的在线文件复制。 PHP 脚本意味着初始化脚本引擎、缓存、解析类、函数、内存分配、会话锁定/解锁和保存、从 Memcached 服务器读取、读取配置文件。对于每个请求。

【讨论】:

  • 查看对 VolkerK 的回答 - 它甚至适用于空 PHP
【解决方案3】:

您可能还想考虑在您的 PHP 服务器前面放置一个 HTTP 缓存。这将减少您的 Web 服务器上的负载,并为您处理重新发送以前呈现的页面。

例如见Varnish。另一种选择是Squid

如果您在共享主机上,显然这些不是选项 - 在这种情况下,呈现为 .html 文件是一个很好的解决方案。

【讨论】:

    【解决方案4】:

    你可以试试(伪代码):

    if file myfilecache/$user_$request_$today.html does not exist 
    then do
         format page 
         write page to myfilecache/$user_$request_$today.html
    done
    redirect to myfilecache/$user_$request_$today.html
    

    文件系统是一个很好的缓存,而 lightpd 将完成提供页面的实际工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2020-10-21
      • 2015-12-20
      • 2018-08-10
      相关资源
      最近更新 更多