运行Drupal基准测试的PHP比应该的速度慢

运行Drupal基准测试的PHP比应该的速度慢,php,bash,drupal,benchmarking,Php,Bash,Drupal,Benchmarking,最初,我把这个贴在。。。但也许这更像是一个PHP语言问题 我有一台双至强四核L5420服务器,运行频率为2.5GHz。我一直在优化我的服务器,最终遇到了瓶颈:PHP 我的非常简单的PHP脚本: /test.php <?php print_r(posix_getpwuid(posix_getuid())); 运行/really benchmark PHP1008 test.php的结果是每秒约137个请求 Start: 0.51 End : 854.29 Start: 0.51 End

最初,我把这个贴在。。。但也许这更像是一个PHP语言问题

我有一台双至强四核L5420服务器,运行频率为2.5GHz。我一直在优化我的服务器,最终遇到了瓶颈:PHP

我的非常简单的PHP脚本:

/test.php

<?php print_r(posix_getpwuid(posix_getuid()));
运行
/really benchmark PHP1008 test.php
的结果是每秒约137个请求

Start: 0.51
End : 854.29
Start: 0.51
End : 854.29
在支持sqlite或mysql的Drupal实例上运行相同的脚本将返回~1.5 req/s

我已经安装了APC和mem_缓存,并且我已经验证了它们是在默认情况下运行的。(是的,APC的enable_cli也打开了。)有人知道神奇的“使PHP执行更快”开关吗

我有一个可选的配置设置(FPM/FastCGI),它提供大约140个请求/秒的MySQL Drupal安装。。。如果PHP本身甚至不能从命令行提供2个req/s的服务,这怎么可能呢

ab
工具的结果对我来说也一样低:

静态页面:
ab-n1000-c100http://x.x.x.x/
每秒请求数:683.71

测试php:
ab-n100-c5http://x.x.x.x/
每秒请求数:41.38

DrupalMySQL:
ab-n100-c10http://x.x.x.x/drupal/
每秒请求数:0.24

drupal sqlite:
ab-n100-c10http://x.x.x.x/drupal-test/
每秒请求数:4.92

Drupal核心(未优化、未缓存、没有APC对每秒性能/页面浏览量非常糟糕)

长话短说。使用Varnish或其他反向代理缓存。

总的来说,相当令人印象深刻。我每秒可以处理的页面请求量增加了167407.84%

Start: 0.51
End : 854.29
Start: 0.51
End : 854.29
这里是性能和性能的区别

下面是我文章中的一些相关片段,显示了不同的数字

测试1(获取起始基准) 运行apache基准测试

ab-k-n100-c100-gstep1.txthttp://example.com/how-it-works

Concurrency Level:      2
Time taken for tests:   23.229 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1923002 bytes
HTML transferred:       1880900 bytes
Requests per second:    4.30 [#/sec] (mean)
Time per request:       464.580 [ms] (mean)
Time per request:       232.290 [ms] (mean, across all concurrent requests)
Transfer rate:          80.84 [Kbytes/sec] received
好吧,这个请求完全杀死了我的服务器。 见下图

因此,我决定减少请求,以便计算每秒的bog标准请求。我处理了100个请求,并发级别为2

并得出如下结论:

Concurrency Level:      2
Time taken for tests:   197.855 seconds
Complete requests:      100
Requests per second: 0.51 [#/sec] (mean)
Time per request: 3957.105 [ms] (mean)
测试2启用APC 然后我重复了测试,但启用了APC

Concurrency Level:      2
Time taken for tests:   87.270 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      2138900 bytes
HTML transferred:       2096300 bytes
Requests per second:    1.15 [#/sec] (mean)
Time per request:       1745.396 [ms] (mean)
Time per request:       872.698 [ms] (mean, across all concurrent requests)
正如你所看到的,这显然更好。但还是很糟糕。每秒1个请求!?哈哈,太可怕了

测试3-启用Drupal核心缓存 然后我启用了Drupal核心缓存。。。并重复了apache基准测试

ab-k-n100-c5-gtest2-c5-k.txthttp://example.com/how-it-works

Concurrency Level:      2
Time taken for tests:   23.229 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1923002 bytes
HTML transferred:       1880900 bytes
Requests per second:    4.30 [#/sec] (mean)
Time per request:       464.580 [ms] (mean)
Time per request:       232.290 [ms] (mean, across all concurrent requests)
Transfer rate:          80.84 [Kbytes/sec] received
所以现在我每秒有4个请求。这明显更好,但总体来说仍然很糟糕

最后一步,将反向代理缓存应用程序添加到混合中。我想看什么?。。实际上我不在乎,任何事情都必须比每秒4个请求更好。如果我能达到每秒300个请求,我会很高兴的。任何接近1000个请求我都会欣喜若狂

这就是我的结局:

Concurrency Level:      300
Time taken for tests:   11.706 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    10000
Total transferred:      190260000 bytes
HTML transferred:       185140000 bytes
Requests per second:    854.29 [#/sec] (mean)
Time per request:       351.168 [ms] (mean)
总的来说,相当令人印象深刻。我每秒可以处理的页面请求量增加了167407.84%

Start: 0.51
End : 854.29
Start: 0.51
End : 854.29
另外,我将每个请求的页面加载时间从1978ms减少到1.17ms(同时),这是一个总体速度提升…很多。速度下降了99.94%。哎哟


您正在运行哪个发行版?我知道一些发行版(特别是CentOS,但也有其他发行版)仍然带有非常糟糕的优化php.ini设置。Gentoo Linux,我保证我已经调整了所有可用的设置。基于Munin的报告,我的服务器几乎没有表现出它的能力。