APC没有为Symfony1.4 / Doctrine应用程序提供任何性能提升?

时间:2012-05-16 14:04:19

标签: php symfony-1.4 benchmarking apc

我正在开发一个应用程序(Symfony 1.4 / Doctrine),它有一些非常重的页面。其中一个页面包含一个非常复杂的表单,其中包含很多关系(嵌入表单)。页面执行如下操作:获取所有对象,创建表单(使用对象),渲染表单。

这导致每页的加载时间约为1.5秒。 MySQL似乎不是瓶颈,执行查询大约需要0.01秒。然而,保湿结果需要更多时间:约0.3秒。创建和嵌入所有子表单也需要很长时间(0.5秒)。其余时间花在常规的Symfony / Doctrine方法上。所有这些时间都是在Symfony计时器和/或xdebug中找到的。

我希望通过使用APC进行操作码缓存,可以加快生产服务器上的进程。所以我安装了APC,做了一些配置(缓存大小= 400MB;最大文件大小= 20MB,只是为了确定),最后对应用程序进行了基准测试。

没有APC:

$ ab -n 100
Requests per second:    0.72 [#/sec] (mean)
Time per request:       1392.142 [ms] (mean)
Time per request:       1392.142 [ms] (mean, across all concurrent requests)
Transfer rate:          130.62 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        4    5   3.6      4      32
Processing:  1301 1387 258.0   1338    3549
Waiting:     1229 1315 258.2   1267    3475
Total:       1305 1392 258.0   1342    3553

使用APC:

$ ab -n 100
Requests per second:    0.86 [#/sec] (mean)
Time per request:       1160.666 [ms] (mean)
Time per request:       1160.666 [ms] (mean, across all concurrent requests)
Transfer rate:          156.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        4    4   0.7      4       9
Processing:  1071 1156 164.1   1121    2337
Waiting:     1024 1104 164.3   1065    2286
Total:       1075 1161 164.1   1125    2341

有一些改进,但结果非常令人失望。为了确保APC运行良好,我还对在同一服务器上运行的Drupal网站进行了基准测试。这几乎使Drupal网站的请求/秒增加了一倍(从4页/秒到8页/秒)!显然APC工作正常。

有没有人知道造成这种加速不足的原因是什么?有没有人在有或没有APC的Symfony应用程序上做过一些基准测试?我可以在互联网上找到一些声称,它们的请求数/两倍,但都没有基准。

1 个答案:

答案 0 :(得分:4)

操作码缓存只会加快原始类的加载速度。当代码循环通过数据库结果的大部分时间,创建复杂的对象时,单独的APC将无济于事。

Doctrine支持缓存查询和结果,但是,需要配置APC中的缓存。请参阅此网址:http://readthedocs.org/docs/doctrine/en/latest/en/manual/caching.html

也许您可以在创建表单后使用apc_add缓存表单。这可能会向用户显示陈旧数据,但这可能是值得的。

要了解更长时间的信息,请查看profiling with XDebug