一、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()資訊中顯示。
使用php apc子產品需要注意的幾點
在maillist中看到Rasmus的一段對于php APC子產品的發言。作為APC的作者,他的見解應該是很有參考價值的。
Php代碼
APC will probably be 20-30% faster, but if you are writing to it frequently it can cause problems. The APC cache is best for things that change very rarely. And by very rarely I mean days, not hours or minutes. Because of the way APC does an anonymous file-backed mmap where I unlink the file at startup to get process-death protection, it isn’t easy to get at the cache from a separate standalone command line script. That can be solved by mmap’ing slightly differently, but in the default config your approach won’t work. -Rasmus
就是說APC不适合用于頻繁寫的場合,你最好隻用它來儲存那種幾天都不會更改的内容。否則出了莫名其妙的問題就不好怎麼解釋了。
在以前的應用中,我确實有将apc用在頻繁寫的場合,偶爾會出現記憶體耗盡,進而引起所有http請求卡死,形式一發不可收拾整個伺服器當掉。是以現在我僅僅用apc來緩存opcode的php代碼,不在程式中顯式的調用它,算是相安無事。
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
$./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
$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
$./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config
$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加速器:
Time taken for tests: 98.530068 seconds
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
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加速器:
Time taken for tests: 95.983986 seconds
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
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
50% 148
66% 174
80% 205
90% 239
95% 263
98% 289
99% 309
100% 3830 (longest request)
XCache加速器:
Time taken for tests: 99.76300 seconds
Complete requests: 3000
Failed requests: 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
Processing: 59 164 83.4 155 3367
Waiting: 52 156 66.4 148 1802
Total: 59 164 83.4 155 3367
75% 196
80% 206
90% 237
98% 287
99% 305
100% 3367 (longest request)
3、結果摘要
請求時間(秒) | 單次請求時間(毫秒) | 最大記憶體占用(MB) | 最小記憶體占用(MB) | |
None | 10.41 | 96.08 | 24 | |
APC | 30.45 | 32.84 | 21 | |
eAccelerator | 31.26 | 31.99 | 23 | 18 |
XCache | 30.28 | 33.02 | 29 | 19 |
四、PHP加速器比較結果總結
1、通過測試得出eAccelerator在請求時間和記憶體占用綜合方面是最好的。
2、通過測試得出使用加速器比無加速器在請求時間快了3倍左右。