三款免费的PHP加速器:APC、eAccelerator、XCache比较
一、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环境):
$wget http://pecl.php.net/get/APC-3.0.19.tgz $tar xvzf APC-3.0.19.tgz $cd APC-3.0.19/APC-3.0.19 $/usr/local/php/bin/phpize $./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php/bin/php-config $make $sudo make install |
下面我们再配置APC,因为我的PECL扩展路径改变了,所以我得移动下编译好的文件:
$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中即可:
extension_dir = "/usr/local/php/lib/php/extensions/PECL" extension = apc.so ; APC apc.enabled = 1 apc.shm_segments = 1 apc.shm_size = 64 apc.optimization = 1 apc.num_files_hint = 0 apc.ttl = 0 apc.gc_ttl = 3600 apc.cache_by_default = on |
这样重启apache就会在 phpinfo()信息中显示。
2、安装配置eAccelerator
eAccelerator的前身其实是truck-mmcache,因为开发truk-mmcache的人被Zend给招安了,所以开发 eAccelerator的人继承了truk-mmcache的一些特性,设计出eAccelerator加速器。安装如下:
$wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.tar.bz2 $tar -jxf eaccelerator-0.9.5.tar.bz2 $cd eaccelerator-0.9.5 $/usr/local/php/bin/phpize $./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config $make $sudo make install $sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php/lib/php/extensions/PECL |
将下面代码加入php.ini文件中
extension = eaccelerator.so ; eAccelerator eaccelerator.shm_size = "16" eaccelerator.cache_dir = "/tmp/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "9" |
创建缓存目录,重启apache
$sudo mkdir /tmp/eaccelerator $sudo chmod 777 /tmp/eaccelerator $sudo /usr/local/apache/apachectl restart |
在phpinfo()检查是否安装成功.
3、安装 配置XCache
XCache作为国人自己开发的东西,做小菜鸟的我也感到骄傲,而且XCache无论在速度还是性能上都做的不错。下面就 赶紧让我们品尝它吧!
$wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz $tar xvzf xcache-1.2.2.tar.gz $cd xcache-1.2.2 $/usr/local/php/bin/phpize $./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config $make $sudo make install $sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so /usr/local/php/lib/php/extensions/PECL |
在php.ini添加配置信息:
extension = xcache.so ; xcache xcache.admin.user = "admin" xcache.admin.pass = "(执行) echo ’(你的密码)’|md5sum(得出的密文)" ; xcache.size = 24M xcache.shm_scheme = "mmap" xcache.count = 2 xcache.slots = 8k xcache.ttl = 0 xcache.gc_interval = 0 xcache.var_size = 8M xcache.var_count = 1 xcache.var_slots = 8k xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = On xcache.mmap_path = "/tmp/xcache" xcache.coredump_directory = "" xcache.cacher = On xcache.stat = On xcache.optimizer = Off ; xcache.coverager = On xcache.coveragedump_directory = "" |
创建缓存 目录,重启apache
$sudo mkdir /tmp/xcache $sudo chmod 777 /tmp/xcache $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、测试结果
无任何加速器:
Document Path: / Document Length: 21757 bytes Concurrency Level: 5 Time taken for tests: 288.255212 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Total transferred: 66777000 bytes HTML transferred: 65271000 bytes Requests per second: 10.41 [#/sec] (mean) Time per request: 480.425 [ms] (mean) Time per request: 96.085 [ms] (mean, across all concurrent requests) Transfer rate: 226.23 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.5 0 19 Processing: 181 479 186.0 444 1822 Waiting: 166 461 184.7 427 1708 Total: 181 479 186.0 444 1822 Percentage of the requests served within a certain time (ms) 50% 444 66% 525 75% 577 80% 619 90% 732 95% 819 98% 946 99% 1012 100% 1822 (longest request) |
APC 加速器:
Document Path: / Document Length: 21757 bytes Concurrency Level: 5 Time taken for tests: 98.530068 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Total transferred: 66777000 bytes HTML transferred: 65271000 bytes Requests per second: 30.45 [#/sec] (mean) Time per request: 164.217 [ms] (mean) Time per request: 32.843 [ms] (mean, across all concurrent requests) Transfer rate: 661.84 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 2 Processing: 58 163 71.2 155 2452 Waiting: 53 158 69.6 150 2329 Total: 58 163 71.2 155 2452 Percentage of the requests served within a certain time (ms) 50% 155 66% 178 75% 193 80% 204 90% 235 95% 258 98% 285 99% 302 100% 2452 (longest request) |
eAccelerator加速器:
Document Path: / Document Length: 21757 bytes Concurrency Level: 5 Time taken for tests: 95.983986 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Total transferred: 66777000 bytes HTML transferred: 65271000 bytes Requests per second: 31.26 [#/sec] (mean) Time per request: 159.973 [ms] (mean) Time per request: 31.995 [ms] (mean, across all concurrent requests) Transfer rate: 679.39 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 3 Processing: 57 159 91.3 148 3830 Waiting: 50 152 89.8 142 3704 Total: 57 159 91.3 148 3830 Percentage of the requests served within a certain time (ms) 50% 148 66% 174 75% 193 80% 205 90% 239 95% 263 98% 289 99% 309 100% 3830 (longest request) XCache 加速器: Document Path: / Document Length: 21757 bytes Concurrency Level: 5 Time taken for tests: 99.76300 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Total transferred: 66777000 bytes HTML transferred: 65271000 bytes Requests per second: 30.28 [#/sec] (mean) Time per request: 165.127 [ms] (mean) Time per request: 33.025 [ms] (mean, across all concurrent requests) Transfer rate: 658.19 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 2 Processing: 59 164 83.4 155 3367 Waiting: 52 156 66.4 148 1802 Total: 59 164 83.4 155 3367 Percentage of the requests served within a certain time (ms) 50% 155 66% 178 75% 196 80% 206 90% 237 95% 263 98% 287 99% 305 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是更新最快的,这也说明最有发展的。