运行Drupal基准测试的PHP比应该的速度慢
最初,我把这个贴在。。。但也许这更像是一个PHP语言问题 我有一台双至强四核L5420服务器,运行频率为2.5GHz。我一直在优化我的服务器,最终遇到了瓶颈:PHP 我的非常简单的PHP脚本: /test.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 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.92Drupal核心(未优化、未缓存、没有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的报告,我的服务器几乎没有表现出它的能力。