python html5 bootstrap 视频教程

德云社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8757|回复: 2

详细比较 PHP 三加速扩展 APC、xcache、eAccelerator 的性能

[复制链接]

20

主题

42

帖子

153

积分

版主

Rank: 7Rank: 7Rank: 7

金钱
91
金币
2
威望
0
贡献
0
发表于 2014-12-31 12:00:56 | 显示全部楼层 |阅读模式
AI人工智能 语音助理 人工翻译 教程
详细比较 PHP 三加速扩展 APC、xcache、eAccelerator 的性能

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 加速器工作原理对应的就是第 4 步,目的是为避免 PHP 每次请求都重复编译 PHP 代码。因为对高访问量网站进行大量编译,往往还没有执行速度快?所以,这里面有个瓶颈就是 PHP 的重复编译,既影响速度又加重服务器负载。为解决此问题,PHP 加速器就这样应运而生。


1、 安装配置 APC

APC 全称 Alternative PHP Cache,官方译为 ”可选 PHP 缓存”。它是 PHP PECL 中的一个扩展,下面开始安装 (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. make install
复制代码

配置 APC,因为 PECL 扩展路径有变化;所以,要移动编译好的文件:

  1. 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. make install
  8. 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. mkdir /tmp/eaccelerator
  2. chmod 777 /tmp/eaccelerator
  3. /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. make install
  8. 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. mkdir /tmp/xcache
  2. chmod 777 /tmp/xcache
  3. /usr/local/apache/bin/apachectl restart
复制代码

phpinfo() 检查是否安装成功。


4、 PHP 加速器测试

测试环境

硬件: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 次请求)


测试结果

无任何加速器

  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)
复制代码

结果如下图所示

测试比较总结:

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

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

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


注意:

1、程序环境非必要 Zend Optimizer 的情况下,首选 APC (它和 Zend Optimizer 是不兼容的);且 APC 的兼容性及性能,表现都非常优秀。


2、若 PHP 环境需要 Zend Optimizer,就安装 eAccelerator,并把 Zend Optimizer 的压缩级别调到 0。


zend optimizer 是一个代码优化模块,可调优 PHP 代码,实现原理:对那些在被最终执行之前,由运行时编译器 (Run-Time Compiler) 产生的代码进行优化。代码性能可提高 40%100%,从这一点严格说,不具备强大的缓存能力。


eAccelerator 是一个将编译后的 PHP 代码缓存在 share memory 中的模块。通过访问共享内存可得到编译后的代码并直接执行,以提高效率。它对 PHP 的执行效率的提高还是很大的。同时,eAccelerator 也可缓存数据至文件中。这部分由于是对文件的操作,对大多数的文件 cache 来说,原理相似,性能相近。


APC 原理上来讲和 eAccelerator 相近,所以差别不大。不通过修改参数详细测试,是不能看出两者优劣的。所以二者取其一即可。


版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。


AI人工智能 语音助理 人工翻译 教程
回复

使用道具 举报

20

主题

42

帖子

153

积分

版主

Rank: 7Rank: 7Rank: 7

金钱
91
金币
2
威望
0
贡献
0
 楼主| 发表于 2014-12-31 12:01:17 | 显示全部楼层
在线订购 便捷实惠 品质保证 终生保修
回复 支持 反对

使用道具 举报

20

主题

42

帖子

153

积分

版主

Rank: 7Rank: 7Rank: 7

金钱
91
金币
2
威望
0
贡献
0
 楼主| 发表于 2014-12-31 12:01:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|Sitemap|小黑屋|德云社区 |网站地图  

GMT+8, 2024-11-27 09:55 , Processed in 0.031576 second(s), 30 queries .

工业和信息化部: 粤ICP备14079481号-2

技术支持 乐数软件     版权所有 © 2014-2021 德云社区    

快速回复 返回顶部 返回列表