当前位置:首页 > PHP教程 > php应用 > 列表

PHP Opcode缓存加速组件:APC详解介绍

发布:smiling 来源: PHP粉丝网  添加日期:2018-09-27 13:12:39 浏览: 评论:0 

PHP在性能上相对于其他编译型语言来说算不上突出,但是使用了Opcode缓存后性能提升还是很明显的。常见的缓存加速组件主要有 eAccelerator,XCache,APC本文主要介绍APC的安装使用。

APC,全称是Alternative PHP Cache,官方翻译叫"可选PHP缓存"。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。

系统缓存

它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存3600s(一小时)。但是这样仍会浪费大量CPU时间。因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0)。不过如果这样设置,改运php代码后需要重启WEB服务器。目前使用较多的是指此类缓存。

用户数据缓存

缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更加专著的内存缓存方案会更好。

APC模块的安装

最简单的方法是直接使用pecl,在命令行下输入:/usr/local/php/bin/pecl install apc

然后按照提示一步步完成即可,示例如下:

  1. [root@iZ23bm1tc0pZ ~]# /usr/local/php/bin/pecl install apc 
  2. downloading APC-3.1.13.tgz ... 
  3. Starting to download APC-3.1.13.tgz (171,591 bytes) 
  4. .....................................done: 171,591 bytes 
  5. 55 source files, building 
  6. running: phpize 
  7. Configuring for
  8. PHP Api Version:         20100412 
  9. Zend Module Api No:      20100525 
  10. Zend Extension Api No:   220100525 
  11. Enable internal debugging in APC [no] : no 
  12. Enable per request file info about files used from the APC cache [no] : no 
  13. Enable spin locks (EXPERIMENTAL) [no] : no 
  14. Enable memory protection (EXPERIMENTAL) [no] : no 
  15. Enable pthread mutexes (default) [no] : no 
  16. Enable pthread read/write locks (EXPERIMENTAL) [yes] : yes 

然后重启服务器即可:

lnmp nginx restart

先看一下没有使用apc情况下的压测结果:

  1. [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://phpfensi.com/index.php 
  2. This is ApacheBench, Version 2.3 <$Revision: 1706008 $> 
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.phpfensi.com/ 
  4. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  5. Benchmarking zfsphp.cn (be patient) 
  6. Completed 100 requests 
  7. Completed 200 requests 
  8. Completed 300 requests 
  9. Completed 400 requests 
  10. Completed 500 requests 
  11. Completed 600 requests 
  12. Completed 700 requests 
  13. Completed 800 requests 
  14. Completed 900 requests 
  15. Completed 1000 requests 
  16. Finished 1000 requests 
  17. Server Software:        nginx 
  18. Server Hostname:        zfsphp.cn 
  19. Server Port:            80 
  20. Document Path:          /index.php 
  21. Document Length:        14341 bytes 
  22. Concurrency Level:      100 
  23. Time taken for tests:   15.517 seconds 
  24. Complete requests:      1000 
  25. Failed requests:        0 
  26. Total transferred:      14544000 bytes 
  27. HTML transferred:       14341000 bytes 
  28. Requests per second:    64.45 [#/sec] (mean) 
  29. Time per request:       1551.671 [ms] (mean) 
  30. Time per request:       15.517 [ms] (mean, across all concurrent requests) 
  31. Transfer rate:          915.34 [Kbytes/sec] received 
  32. Connection Times (ms) 
  33.               min  mean[+/-sd] median   max 
  34. Connect:        0    2   4.8      0      17 
  35. Processing:    46 1481 277.0   1560    1638 
  36. Waiting:       42 1481 277.1   1560    1638 
  37. Total:         58 1482 272.8   1560    1638 
  38. Percentage of the requests served within a certain time (ms) 
  39.   50%   1560 
  40.   66%   1576 
  41.   75%   1582 
  42.   80%   1587 
  43.   90%   1602 
  44.   95%   1612 
  45.   98%   1622 
  46.   99%   1629 
  47.  100%   1638 (longest request) 

可见最大吞吐率只有64.45reqs/s

然后我们开启apc,测试结果如下:

  1. [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://phpfensi.com/index.php 
  2. This is ApacheBench, Version 2.3 <$Revision: 1706008 $> 
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.phpfensi.com/ 
  4. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  5. Benchmarking zfsphp.cn (be patient) 
  6. Completed 100 requests 
  7. Completed 200 requests 
  8. Completed 300 requests 
  9. Completed 400 requests 
  10. Completed 500 requests 
  11. Completed 600 requests 
  12. Completed 700 requests 
  13. Completed 800 requests 
  14. Completed 900 requests 
  15. Completed 1000 requests 
  16. Finished 1000 requests 
  17. Server Software:        nginx 
  18. Server Hostname:        zfsphp.cn 
  19. Server Port:            80 
  20. Document Path:          /index.php 
  21. Document Length:        14341 bytes 
  22. Concurrency Level:      100 
  23. Time taken for tests:   7.122 seconds 
  24. Complete requests:      1000 
  25. Failed requests:        0 
  26. Total transferred:      14544000 bytes 
  27. HTML transferred:       14341000 bytes 
  28. Requests per second:    140.41 [#/sec] (mean) 
  29. Time per request:       712.189 [ms] (mean) 
  30. Time per request:       7.122 [ms] (mean, across all concurrent requests) 
  31. Transfer rate:          1994.29 [Kbytes/sec] received 
  32. Connection Times (ms) 
  33.               min  mean[+/-sd] median   max 
  34. Connect:        0    1   2.4      0      10 
  35. Processing:    23  677 125.3    705     775 
  36. Waiting:       22  677 125.4    705     775 
  37. Total:         30  678 123.1    705     775 
  38. Percentage of the requests served within a certain time (ms) 
  39.   50%    705 
  40.   66%    719 
  41.   75%    726 
  42.   80%    730 
  43.   90%    742 
  44.   95%    750 
  45.   98%    760 
  46.   99%    765 
  47.  100%    775 (longest request) 

可见吞吐率提高了一倍多,达到140.41reqs/s。

然后,我们在开启动态内容缓存(楼主的博客用的是Smarty缓存),测试结果如下:

  1.  [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://phpfensi.com/index.php 
  2. This is ApacheBench, Version 2.3 <$Revision: 1706008 $> 
  3. Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.phpfensi.com/ 
  4. Licensed to The Apache Software Foundation, http://www.apache.org/ 
  5. Benchmarking zfsphp.cn (be patient) 
  6. Completed 100 requests 
  7. Completed 200 requests 
  8. Completed 300 requests 
  9. Completed 400 requests 
  10. Completed 500 requests 
  11. Completed 600 requests 
  12. Completed 700 requests 
  13. Completed 800 requests 
  14. Completed 900 requests 
  15. Completed 1000 requests 
  16. Finished 1000 requests 
  17. Server Software:        nginx 
  18. Server Hostname:        phpfensi.com 
  19. Server Port:            80 
  20. Document Path:          /index.php 
  21. Document Length:        14341 bytes 
  22. Concurrency Level:      100 
  23. Time taken for tests:   2.263 seconds 
  24. Complete requests:      1000 
  25. Failed requests:        0 
  26. Total transferred:      14544000 bytes 
  27. HTML transferred:       14341000 bytes 
  28. Requests per second:    441.98 [#/sec] (mean) 
  29. Time per request:       226.255 [ms] (mean) 
  30. Time per request:       2.263 [ms] (mean, across all concurrent requests) 
  31. Transfer rate:          6277.49 [Kbytes/sec] received 
  32. Connection Times (ms) 
  33.               min  mean[+/-sd] median   max 
  34. Connect:        0    1   3.1      0      12 
  35. Processing:    18  215  38.1    222     255 
  36. Waiting:       18  215  38.3    222     255 
  37. Total:         26  216  35.6    223     255 
  38. Percentage of the requests served within a certain time (ms) 
  39.   50%    223 
  40.   66%    230 
  41.   75%    232 
  42.   80%    234 
  43.   90%    237 
  44.   95%    239 
  45.   98%    240 
  46.   99%    243 
  47.  100%    255 (longest request) 

这一次吞吐率居然达到441.98reqs/s,提高了三倍多,相比最初的64.45reqs/s提高了近7倍,可见使用apc的opcode缓存配合Smarty缓存,对网站性能的优化效果还是相当明显的。

Tags: 缓存 组件

分享到: