天天看點

PHP加速器

 一、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

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

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倍左右。

3、通過各個官方觀察,XCache是更新最快的,這也說明最有發展的。

以上是總結結果,你也許會問我到底用那個加速器好呢?我隻能告訴你,首先,用一定比不用好,其次每個加速器還有一些可以調優的參數,是以要根據你的系統環境而定,然後,我個人覺得你可以詳細研究下eAccelerator和XCache,這兩款潛力還是很大的。