一、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是更新最快的,這也說明最有發展的。
以上是總結結果,你也許會問我到底用那個加速器好呢?我只能告訴你,首先,用一定比不用好,其次每個加速器還有一些可以調優的參數,所以要根據你的系統環境而定,然后,我個人覺得你可以詳細研究下eAccelerator和XCache,這兩款潛力還是很大的,最后我從比較專業的測試網站搞了一張結果