首頁  >  文章  >  後端開發  >  關於PHP加速eAccelerator、Xcache、APC和Zend Optimizer

關於PHP加速eAccelerator、Xcache、APC和Zend Optimizer

WBOY
WBOY原創
2016-08-08 09:30:551050瀏覽

以前只關注過Zend Optimizer,因為高胖子的書就是這樣教的,但是遇到奇葩公司的面試題提問你知道多少個php加速器/緩存,我一下子楞了,因為我所知道的php5.2 .x只用過Zend Optimizer,而且加密過的php程式只能在Zend Optimizer下面運行。但php5.3.x以上版本,Zend Optimizer支援不了了,更別提eAccelerator、Xcache、APC。 Zend guard loader可以支援php5.3.x以上版本,而且最新的php5.5.x版本,官網說內建了Zend guard,所以更不要phper關注加速器了。既然遇到這樣的問題,也從網路上總結了一下東西,網友們看過就行了,不必去試驗了。

安裝哪一個呢?對性能會有什麼影響呢?有時間要測試一下。

從別處看來的。

程式環境非必要Zend Optimizer的情況下,首選pecl-APC(它和Zend Optimizer不相容)。
總結:
1.PHP緩衝(加速)首選pecl-APC,相容性和效能表現都非常優秀。
2.如果你的PHP環境需要Zend Optimizer,就安裝eAccelerator,並把Zend Optimizer的壓縮等級調到0。

zend optimizer 是一個程式碼最佳化的模組,可以調優php程式碼,實作的原理是對那些在被最終執行之前由運行編譯器(Run-Time Compiler)產生的程式碼進行最佳化。程式碼效能可以提高40%到100%,從這點上來說,應該不具有強大的快取功能,沒有讀過源碼,不清楚是否具有快取 以及快取品質如何。
eAccelerator 是一個將編譯後的php程式碼快取在share memory中的模組。透過存取共享記憶體可以得到編譯後的程式碼並直接執行用以提高效率,這個對於php的執行效率的提高還是很大的。同 時,eAccelerator也可以緩存資料至文件中,這個部分由於是對文件的操作,我想對大多數的文件cache來說,原理相似,性能相近。
APC 原理上來講和eAccelerator相近,所以差異不大。不通過修改參數詳細測試,不能看出兩者的優劣。所以取其一即可。

三款免費的PHP加速器:APC、eAccelerator、XCache比較

一、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://peclcl .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 =apc30.hint 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
$tar -jxf 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/eaccelator"cc​​oalatorelmoe​​片= "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shmmeaccelerator.shm_max = "0"
eaccelerator。 "
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 = 00xcache.ttl = 0
xcache.gc_intervalache.gc_interval
xcache.var_size = 8M

xcache.var_count = 1

xcache.var_slots = 8k
xcache.var_ttl = 0
xcache.var_maxttl = 0pachexachecache. ection = On
xcache .mmap_path = "/tmp/xcache"
xcache.coredump_directory = ""
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
;
xcache
xcache.optimizer = Off
;
xcache
建立快取目錄,重啟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

​​equestte requests: 3000 下來red: 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
Time per request: 96.085 [ms] (mean, across
Time per request: 96.085 [ms] (mean, across
Time Transsid 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: 181 479 186.0 444 182221647843845 707451387453835 70383537353735 tal: 181 479 186.0 444 1822
Percentage of the requests served within a certain time (ms)
50% 444
66% 525
75% 577
80% 619575%
99% 1012
100% 1822 (longest request)

APC加速器:

文件路徑:/
文檔長度:21757 位元組
並發等級:5
測試時間:98.530068 秒
完成請求:3000
失敗請求:0
寫入錯誤:0完成請求:3000
失敗請求:0
寫入錯誤:0 80377003705700% :65271 000位元組
每秒請求數:30.45 [#/sec](平均值)
每個請求時間:164.217 [毫秒](平均值)
每個請求時間:32.843 [毫秒](所有並發請求的平均值)
傳輸率:661.84 [ Kbytes/sec] 收到
連接時間(ms)
最小值平均值[+/-sd] 中位數最大值
連接:0 0 0.0 0 2
處理:58 163 71.2 155 2452
等待:53 158 69.6 150 2329
總計:58 163 71.2 155 2452
一定時間內處理的請求百分比(毫秒)
50% 157% 04
90% 235
95% 258
98% 285
99% 30 2
100% 2452(最長的請求)

eAccelerator 加速器:

文檔路徑:/

文檔長度:21757 位元組

並發等級:5

測試時間:95.983986 秒
完成請求:3000
失敗請求:0
寫入錯誤:0 :65271 000位元組
每秒請求數:31.26 [#/sec](平均值)
每個請求時間:159.973 [ms](平均值)
每個請求時間:31.995 [ms](平均值,所有並發請求)
傳輸率:679.39 [ Kbytes/sec] 收到
連接時間(ms)
最小值平均值[+/-sd] 中位數最大值
連接:0 0 0.1 0 3
處理:57 159 91.3 148 3830
等待:50 152 89.8 142 3704
總計:57 159 91.3 148 3830
一定時間內處理的請求百分比(毫秒)
50% 118% 05
90% 239
95% 263
98% 289
99% 30 9
100% 3830(最長的請求)

XCache加速器:

文件路徑:/
文件長度:21757 位元組
並發等級:5
測試時間:99.76300 秒
完成請求:3000

失敗請求:0

寫入錯誤:0 :652710 00位元組

每秒請求數:30.28 [#/sec](平均值)

每個請求時間:165.127 [毫秒](平均值)
每個請求時間:33.025 [毫秒](所有並發請求的平均值)
傳輸率:658.19 [ Kbytes/sec] 收到
連接時間(毫秒)
最小值平均值[+/-sd] 中位數最大值
連接:0 0 0.0 0 2
處理:59 164 83.4 155 3367
等待:52 156 66.4 148 1802
總計:59 164 83.4 155 3367
一定時間內處理的請求百分比(毫秒)
50% 157% 06
90% 237
95% 263
98% 287
99% 30 5
100% 3367(最長的請求)

3、結果摘要




 

請求時間(秒)

單次請求時間(幾十)

最大記憶體佔用(MB)

最小記憶體佔用(MB)

沒有10.4196.082424APC30.4532.842121電子加速器31.2631.992318XCache30.2833.022919
四、PHP加速器比較結果總結      1.透過測試發現eAccelerator在請求時間和記憶體佔用綜合方面是最好的。      2.透過測試得出使用加速器比無加速器在請求時間快了3倍左右。      3、透過各個官方觀察,XCache是​​更新最快的,這也說明最有發展的。         以上是總結結果,你或許會問我到底用那個加速器好呢?我只能告訴你,首先,用一定比不用好,其次每個加速器還有一些可以調優的參數,所以要根據你的系統環境而定,然後,我個人覺得你可以詳細研究下eAccelerator和XCache ,這兩個潛力還是很大的,最後我從比較專業的測驗網站搞出了一張結果圖:

原文連結網址:http://www.vpser.net/opt/apc-eaccelerator-xcache.html

以上就介紹了關於PHP加速eAccelerator、Xcache、APC和Zend Optimizer,包含方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn