天天看點

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

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