一、PHP加速器介绍

PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提高了不少。

Apache中使用mod_php的请求、响应执行流程:

1、Apache接收请求。
2、Apache传递请求给mod_php。
3、mod_php定位磁盘文件,并加载到内存中。
4、mod_php编译源代码成为opcode树。
5、mod_php执行opcode树。

PHP加速器相应的就是第四步,它的目的就是防止PHP每次请求都重复编译PHP代码,因为在高访问量的网站上,大量的编译往往没有执行速度快呢?所以这 里面有个瓶颈就是PHP的重复编译既影响了速度又加载了服务器负载,为了解决此问题,PHP加速器就这样诞生了。

二、PHP加速器安装与配置

1、安装配置APC

APC全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,它是PHP PECL中的一个扩展,好像是facebook在使用它,下面开始安装(ubuntu环境):

  1. $wget http://pecl.php.net/get/APC-3.0.19.tgz
  2. $tar xvzf APC-3.0.19.tgz
  3. $cd APC-3.0.19/APC-3.0.19
  4. $/usr/local/php/bin/phpize
  5. $./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php/bin/php-config
  6. $make
  7. $sudo make install

下面我们再配置APC,因为我的PECL扩展路径改变了,所以我得移动下编译好的文件:

  1. $sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so /usr/local/php/lib/php/extensions/PECL

然后我们再编辑php.ini文件进行配置,请把下面的代码加入到php.ini中即可:

  1. extension_dir = “/usr/local/php/lib/php/extensions/PECL”
  2. extension = apc.so
  3. ; APC
  4. apc.enabled = 1
  5. apc.shm_segments = 1
  6. apc.shm_size = 64
  7. apc.optimization = 1
  8. apc.num_files_hint = 0
  9. apc.ttl = 0
  10. apc.gc_ttl = 3600
  11. apc.cache_by_default = on

这样重启apache就会在phpinfo()信息中显示。

2、安装配置eAccelerator

eAccelerator的前身其实是truck-mmcache,因为开发truk-mmcache的人被Zend给招安了,所以开发 eAccelerator的人继承了truk-mmcache的一些特性,设计出eAccelerator加速器。安装如下:

  1. $wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.tar.bz2
  2. $tar -jxf eaccelerator-0.9.5.tar.bz2
  3. $cd eaccelerator-0.9.5
  4. $/usr/local/php/bin/phpize
  5. $./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
  6. $make
  7. $sudo make install
  8. $sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php/lib/php/extensions/PECL

将下面代码加入php.ini文件中

  1. extension = eaccelerator.so
  2. ; eAccelerator
  3. eaccelerator.shm_size = “16″
  4. eaccelerator.cache_dir = “/tmp/eaccelerator”
  5. eaccelerator.enable = “1″
  6. eaccelerator.optimizer = “1″
  7. eaccelerator.check_mtime = “1″
  8. eaccelerator.debug = “0″
  9. eaccelerator.filter = “”
  10. eaccelerator.shm_max = “0″
  11. eaccelerator.shm_ttl = “0″
  12. eaccelerator.prune_period = “0″
  13. eaccelerator.shm_only = “0″
  14. eaccelerator.compress = “1″
  15. eaccelerator.compress_level = “9″

创建缓存目录,重启apache

  1. $sudo mkdir /tmp/eaccelerator
  2. $sudo chmod 777 /tmp/eaccelerator
  3. $sudo /usr/local/apache/apachectl restart

在phpinfo()检查是否安装成功.

3、安装配置XCache

XCache作为国人自己开发的东西,做小菜鸟的我也感到骄傲,而且XCache无论在速度还是性能上都做的不错。下面就赶紧让我们品尝它吧!

  1. $wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
  2. $tar xvzf xcache-1.2.2.tar.gz
  3. $cd xcache-1.2.2
  4. $/usr/local/php/bin/phpize
  5. $./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config
  6. $make
  7. $sudo make install
  8. $sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so /usr/local/php/lib/php/extensions/PECL

在php.ini添加配置信息:

  1. extension = xcache.so
  2. ; xcache
  3. xcache.admin.user = “admin”
  4. xcache.admin.pass = “(执行) echo ’(你的密码)’|md5sum(得出的密文)”
  5. ;
  6. xcache.size = 24M
  7. xcache.shm_scheme = “mmap”
  8. xcache.count = 2
  9. xcache.slots = 8k
  10. xcache.ttl = 0
  11. xcache.gc_interval = 0
  12. xcache.var_size = 8M
  13. xcache.var_count = 1
  14. xcache.var_slots = 8k
  15. xcache.var_ttl = 0
  16. xcache.var_maxttl = 0
  17. xcache.var_gc_interval = 300
  18. xcache.test = Off
  19. xcache.readonly_protection = On
  20. xcache.mmap_path = “/tmp/xcache”
  21. xcache.coredump_directory = “”
  22. xcache.cacher = On
  23. xcache.stat = On
  24. xcache.optimizer = Off
  25. ;
  26. xcache.coverager = On
  27. xcache.coveragedump_directory = “”

创建缓存目录,重启apache

  1. $sudo mkdir /tmp/xcache
  2. $sudo chmod 777 /tmp/xcache
  3. $sudo /usr/local/apache/bin/apachectl restart

去查看phpinfo()信息吧!

三、PHP加速器测试

1、测试环境

硬件:   AMD Athlon 64 X2 Dual Core Processor 4400+ @ 2.2GHz  CPU,  2GB 内存. 160GB SATA 硬盘

软件:   Linux Ubuntu server Gutsy 7.10, Apache 2.2.4, MySQL 5.0.45 和 PHP 5.2.3

测试指令:  ab -c5 -n3000 http://example.com/      (我们使用的是Apache Benchmark (ab) 工具,并发连接为5,3000次请求)

2、测试结果

无任何加速器:

  1. Document Path:          /
  2. Document Length:        21757 bytes
  3. Concurrency Level:      5
  4. Time taken for tests:   288.255212 seconds
  5. Complete requests:      3000
  6. Failed requests:        0
  7. Write errors:           0
  8. Total transferred:      66777000 bytes
  9. HTML transferred:       65271000 bytes
  10. Requests per second:    10.41 [#/sec] (mean)
  11. Time per request:       480.425 [ms] (mean)
  12. Time per request:       96.085 [ms] (mean, across all concurrent requests)
  13. Transfer rate:          226.23 [Kbytes/sec] received
  14. Connection Times (ms)
  15. min mean[+/-sd] median max
  16. Connect:        0    0   0.5      0      19
  17. Processing:   181  479 186.0    444    1822
  18. Waiting:      166  461 184.7    427    1708
  19. Total:        181  479 186.0    444    1822
  20. Percentage of the requests served within a certain time (ms)
  21. 50%    444
  22. 66%    525
  23. 75%    577
  24. 80%    619
  25. 90%    732
  26. 95%    819
  27. 98%    946
  28. 99%   1012
  29. 100%   1822 (longest request)

APC加速器:

  1. Document Path:          /
  2. Document Length:        21757 bytes
  3. Concurrency Level:      5
  4. Time taken for tests:   98.530068 seconds
  5. Complete requests:      3000
  6. Failed requests:        0
  7. Write errors:           0
  8. Total transferred:      66777000 bytes
  9. HTML transferred:       65271000 bytes
  10. Requests per second:    30.45 [#/sec] (mean)
  11. Time per request:       164.217 [ms] (mean)
  12. Time per request:       32.843 [ms] (mean, across all concurrent requests)
  13. Transfer rate:          661.84 [Kbytes/sec] received
  14. Connection Times (ms)
  15. min mean[+/-sd] median max
  16. Connect:        0    0   0.0      0       2
  17. Processing:    58  163  71.2    155    2452
  18. Waiting:       53  158  69.6    150    2329
  19. Total:         58  163  71.2    155    2452
  20. Percentage of the requests served within a certain time (ms)
  21. 50%    155
  22. 66%    178
  23. 75%    193
  24. 80%    204
  25. 90%    235
  26. 95%    258
  27. 98%    285
  28. 99%    302
  29. 100%   2452 (longest request)

eAccelerator加速器:

  1. Document Path:          /
  2. Document Length:        21757 bytes
  3. Concurrency Level:      5
  4. Time taken for tests:   95.983986 seconds
  5. Complete requests:      3000
  6. Failed requests:        0
  7. Write errors:           0
  8. Total transferred:      66777000 bytes
  9. HTML transferred:       65271000 bytes
  10. Requests per second:    31.26 [#/sec] (mean)
  11. Time per request:       159.973 [ms] (mean)
  12. Time per request:       31.995 [ms] (mean, across all concurrent requests)
  13. Transfer rate:          679.39 [Kbytes/sec] received
  14. Connection Times (ms)
  15. min mean[+/-sd] median max
  16. Connect:        0    0   0.1      0       3
  17. Processing:    57  159  91.3    148    3830
  18. Waiting:       50  152  89.8    142    3704
  19. Total:         57  159  91.3    148    3830
  20. Percentage of the requests served within a certain time (ms)
  21. 50%    148
  22. 66%    174
  23. 75%    193
  24. 80%    205
  25. 90%    239
  26. 95%    263
  27. 98%    289
  28. 99%    309
  29. 100%   3830 (longest request)

XCache加速器:

  1. Document Path:          /
  2. Document Length:        21757 bytes
  3. Concurrency Level:      5
  4. Time taken for tests:   99.76300 seconds
  5. Complete requests:      3000
  6. Failed requests:        0
  7. Write errors:           0
  8. Total transferred:      66777000 bytes
  9. HTML transferred:       65271000 bytes
  10. Requests per second:    30.28 [#/sec] (mean)
  11. Time per request:       165.127 [ms] (mean)
  12. Time per request:       33.025 [ms] (mean, across all concurrent requests)
  13. Transfer rate:          658.19 [Kbytes/sec] received
  14. Connection Times (ms)
  15. min mean[+/-sd] median max
  16. Connect:        0    0   0.0      0       2
  17. Processing:    59  164  83.4    155    3367
  18. Waiting:       52  156  66.4    148    1802
  19. Total:         59  164  83.4    155    3367
  20. Percentage of the requests served within a certain time (ms)
  21. 50%    155
  22. 66%    178
  23. 75%    196
  24. 80%    206
  25. 90%    237
  26. 95%    263
  27. 98%    287
  28. 99%    305
  29. 100%   3367 (longest request)

3、结果摘要

请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None 10.41 96.08 24 24
APC 30.45 32.84 21 21
eAccelerator 31.26 31.99 23 18
XCache 30.28 33.02 29 19

四、PHP加速器比较结果总结

1、通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。

2、通过测试得出使用加速器比无加速器在请求时间快了3倍左右。

3、通过各个官方观察,XCache是更新最快的,这也说明最有发展的。

以上是总结结果,你也许会问我到底用那个加速器好呢?我只能告诉你,首先,用一定比不用好,其次每个加速器还有一些可以调优的参数,所以要根据你的系统环 境而定,然后,我个人觉得你可以详细研究下eAccelerator和XCache,这两款潜力还是很大的,最后我从比较专业的测试网站搞了一张结果图:

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/387