php Zend Opcache,xcache,eAccelerator緩存優化詳解及對比

XCACHEphp

XCache 是一個開源的 opcode 緩存器/優化器, 這意味着他可以提升您服務器上的 PHP 性能. 他經過把編譯 PHP 後的數據緩衝到共享內存從而避免重複的編譯過程, 可以直接使用緩衝區已編譯的代碼從而提升速度. 一般可以提升您的頁面生成速率 2 到5 倍, 下降服務器負載.html

XCache 是一個又快又穩定的 PHP opcode 緩存器. 通過良好的測試並在大流量/高負載的生產機器上穩定運行. 通過(在 linux 上)測試並支持全部現行 PHP 分支的最新發布版本, 如 PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1 PHP_5_2 HEAD(6.x), 並支持線程安全/Windows. 與同類 opcode 緩存器相比更勝一籌, 好比可以快速跟進 PHP 版本.linux

XCache 工程由 mOo 領隊, 他也是 Lighttpd 的開發成員之一. Lighttpd 是最快的 Web 服務器應用程序之一, 而且超越 Apache 以及許多其餘 Web 服務器. XCache 努力達到相似的效果.git

XCache 的INI配置詳解github

載入 XCache 模塊    web

   
引用    
;; 安裝成 zend extension (推薦), 路徑通常是 「$extension_dir/xcache.so」    
zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so    
;; Windows 系統例子:    
zend_extension_ts = c:/php/extensions/php_xcache.dll    
;; 或者您也可把 XCache 安裝成 extension, 注意確保您的 extension_dir 設置正確, 並    
把 xcache.so 或者 php_xcache.dll 放到該目錄裏面    
; extension = xcache.so    
;; 或者 Win32 系統:    
; extension = php_xcache.dllapache

XCache Administrationcentos

xcache.admin.user string  
驗證名.    
xcache.admin.pass string    
md5 後的驗證密碼, 亦即 md5(您的密碼), 留空則禁用管理頁面.    
xcache.test string    
僅在測試一些功能的時候才啓用. 若是您不知道這個功能的做用, 則您不須要知道.    
xcache.coredump_directory string    
設 置在 crash (SIGSEGV/SIGABRT) 時保存 core dump 文件的路徑. 留空則禁止, 或者設置爲相似 「/tmp/phpcore/」 的目錄. 確保這個路徑能夠被 php 寫入文件. (與 open_basedir 無關).    
xcache.admin.enable_auth string    
如 果你打算本身處理驗證, 用這個選項禁止 HTTP 驗證功能. 值得注意的是任意 vhost 用戶均可以安裝一個 XCache admin 頁面, 若是禁止了內建 HTTP 驗證, 則他們亦不須要權限便可訪問管理頁面. 出於安全考慮, 您應該儘可能考慮保留 XCache 內建驗證功能, 針對 XCache admin 頁面特定地址取消網頁服務器的 mod_auth 這個選項僅在 1.2.x 系列有做用, 起始版本 1.2.1瀏覽器

XCache Cacher緩存

xcache.cacher boolean  
使用/不使用 opcode 緩存器. xcache.size = 0 時無效.    
xcache.size int    
0 禁止, 非 0 則啓用緩存器. 請注意您系統所容許的 mmap 最大值.    
xcache.count int    
指定將 cache 切分紅多少塊. 參考 SplittedCache    
xcache.slots size    
只是做爲 hash 槽個數的參考值, 您能夠放心地緩衝超過這個個數的項目.    
xcache.ttl seconds    
設置緩衝項目的 Ttl (Time To Live) 值, 0=永不過時.    
xcache.gc_interval seconds    
檢查過時項目, 回收內存空間的間隔.    
xcache.var_size int    
xcache.var_count int    
xcache.var_slots size    
xcache.var_gc_interval seconds    
同上, 不過用於數據緩衝而不是 opcode 緩衝.    
xcache.var_ttl seconds    
xcache_(get|set|inc|dec) 等的默認 ttl 值.    
xcache.var_maxttl seconds    
最大 ttl 值, 程序沒法指定超過這個最大值的 ttl.    
xcache.readonly_protection boolean    
若是啓用了 ReadonlyProtection, 將會略微下降性能, 可是會提升必定的安全係數. 這個選項對於 xcache.mmap_path = /dev/zero 無效.    
xcache.mmap_path string    
對 於 *nix, xcache.mmap_path 是 文件路徑, 不是目錄. 對於 Win32, xcache.mmap_path 只是匿名的 map 名, 不是實際的文件路徑. 若是您要啓用 ReadonlyProtection 請用相似 「/tmp/xcache」 的路徑. 2 組 php 不應共用同一個路徑 (/dev/zero 除外).

XCache Optimizer

xcache.optimizer boolean  
啓用優化器 (目前無效).

XCache Coverager

xcache.coverager boolean  
Enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)    
xcache.coveragedump_directory string    
Directory to dump coverage data. Make sure it’s readable (care open_basedir) by coverage viewer script. Requires xcache.coverager=On

eAccelerator

一、背景  
eAccelerator 是一個免費開源的PHP加速、優化、編譯和動態緩存的項目,它能夠經過緩存PHP代碼編譯後的結果來提升PHP腳本的性能,使得一貫很複雜和離咱們很遠的 PHP腳本編譯問題徹底獲得解決。經過使用eAccelerator,能夠優化你的PHP代碼執行速度,下降服務器負載,能夠提升PHP應用執行速度最高 達10倍。

eAccelerator 項目誕生於2004年,當時它是做爲 Turck MMCache 項目的一個分支提出並投入開發的。 Turck MMCache 由 Dmitry Stogov 開發,是個很是優秀的PHP內存緩存加速系統,現在仍然有很大部分 eAccelerator 的代碼應用到該項目中,目前該項目有很長時間沒有更新了,對於最新的PHP版本支持還未推出。

二、原理  
eAccelerator 經過把通過編譯後的PHP代碼緩存到共享內存中,並在用戶訪問的時候直接調用從而起到高效的加速做用。它的效率很是高,從建立共享內存到查找編譯後的代碼 都在很是短的時間內完成,對於不能緩存到共享內存中的文件和代碼,eAccelerator還能夠把他們緩存到系統磁盤上。

eAccelerator 一樣還支持PHP代碼的編譯和解釋執行,你能夠經過encoder.php腳原本對php代碼進行編譯達到保護代碼的目的,通過編譯後的代碼必須運行在安 裝了eAccelerator的環境下。eAccelerator編譯後的代碼不能被反編譯,它不象其餘一些編譯工具那樣能夠進行反編譯,這將使得代碼更 加安全和高效。

最新的PHP5.4.8安裝eAccelerator,

須要注意的是要安裝高版本的,低了編譯不過去。

官網:http://eaccelerator.net/

1.下載安裝eAccelerator

#wget https://github.com/eaccelerator/eaccelerator/tarball/master

最新的版本是eaccelerator-42067ac.tar.gz

#tar zxvf eaccelerator-42067ac.tar.gz

須要phpize安裝php擴展,若是不明白phpize能夠看這個:http://blog.csdn.net/21aspnet/article/details/8193482

須要注意的是須要寫php的安裝路徑對應的phpize下面的php-config也是

#  /usr/local/webserver/php/bin/phpize

須要記住生成的提示信息下面配置php要用到

/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-

20100525/

#./configure –enable-eaccelerator=shared –with-php-config=/usr/local/webserver/php/bin/php-config

# make

須要注意的是要安裝高版本的,低了編譯不過去。

# make install

2.配置php.ini配置文件

[eaccelerator]  
extension=」/data/webserver/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so」    
eaccelerator.shm_size=」32″    
eaccelerator.cache_dir=」/data/cache/eaccelerator」    
eaccelerator.enable=」1″    
eaccelerator.optimizer=」1″ (若是沒有安裝optimizer請設置爲0關閉加速引擎,不然會出現PHP腳本錯誤)    
eaccelerator.check_mtime=」1″    
eaccelerator.debug=」0″    
eaccelerator.filter=」"    
eaccelerator.shm_max=」0″    
eaccelerator.shm_ttl=」0″    
eaccelerator.shm_prune_period=」0″    
eaccelerator.shm_only=」0″    
eaccelerator.compress=」1″    
eaccelerator.compress_level=」9″    
創建緩存目錄:    
# mkdir -p /data/cache/eaccelerator    
# chmod 0777 /data/cache/eaccelerator    
重啓Apache:    
# service httpd restart    
三、檢查ZendOptimizer和eaccelerator是否安裝成功    
建立一個phpinfo.php文件,內容以下:    
<?php    
    phpinfo();    
?>    
將該文件放置到網站目錄,在瀏覽器中訪問,若是出現如下內容則安裝成功:    
This program makes use of the Zend Scripting Language Engine:    
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies    
    with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator    
    with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies    
    with Zend Optimizer v3.2.2, Copyright (c) 1998-2006, by Zend Technologies    
2、eaccelerator配置信息詳解(根據官方英文說明翻譯)    
extension=」/data/webserver/php/lib/php/extensions/no-debug-zts-20060613/eaccelerator.so」    
解釋:PHP擴展eaccelerator.so的路徑。    
——————–    
eaccelerator.shm_size=」32″    
解釋:eaccelerator可以使用的共享內存大小(單位爲MB)。    
在Linux下,單個進程的最大內存使用量受/proc/sys/kernel/shmmax中設置的數字限制(單位爲字節),例如CentOS 4.4的shmmax默認值爲33554432字節(33554432bytes/1024/1024=32MB)。    
臨時更改該值:    
# echo 字節數 > /proc/sys/kernel/shmmax    
按照以上方法更改,在每次重啓系統時,該值會被自動還原。若是想永久更改,能夠修改/etc/sysctl.conf文件,設置:    
kernel.shmmax = 字節數    
——————–    
eaccelerator.cache_dir=」/data/cache/eaccelerator」    
解釋:緩存路徑,可使用命令mkdir -p /data/cache/eaccelerator建立該目錄,而後使用命令chmod 0777 /data/cache/eaccelerator設置該目錄權限爲0777    
——————–    
eaccelerator.enable=」1″    
解釋:打開或者關閉eaccelerator。」1″指打開,」0″指關閉。默認值爲」1″。    
——————–    
eaccelerator.optimizer=」1″  (若是沒有安裝optimizer請設置爲0關閉加速引擎,不然會出現PHP腳本錯誤)

解釋:打開或者關閉代碼優化,開啓能夠加快代碼的執行速度。」1″指打開,」0″指關閉。默認值爲」1″。  
——————–    
eaccelerator.check_mtime=」1″    
解釋:當打開此項時,eaccelerator會在每次請求時檢查php文件的修改時間,看其是否被修改過,這會耗費一點時間,若是php文件被修改 過,eaccelerator會從新編譯緩存該php文件。當關閉此項時,若是php文件被修改,則須要手工刪除eaccelerator緩存,才能顯示 被修改的php文件。」1″指打開,」0″指關閉。默認值爲」1″。    
——————–    
eaccelerator.debug=」0″    
解釋:打開或者關閉調試記錄。當打開時,eaccelerator會將對一個緩存文件的每次請求都寫進log。打開此項只對調試eaccelerator是否有BUG時有益處。」1″指打開,」0″指關閉。默認值爲」0″。    
——————–    
eaccelerator.filter=」"    
解釋:決定哪些PHP文件應該被緩存。能夠指定一個範圍(好比」*.php *.phtml」),這樣被指定的文件就會被緩存。若是該範圍以!開頭,被指定的文件就不會被緩存。默認值爲」",表示緩存全部的PHP文件。    
——————–    
eaccelerator.shm_max=」0″    
解釋:一個用戶使用例如eaccelerator_put之類的函數可以往共享內存中加載的最大數據。默認值爲」0″,表示不限制。(單位爲字節)    
——————–    
eaccelerator.shm_ttl=」0″    
解釋:當沒有足夠的空閒共享內存去嘗試緩衝一個新腳本時,將刪除至少在shm_ttl秒以前沒有被訪問過的文件。默認值爲」0″,表示不嘗試從共享內存中刪除任何舊的腳本。(單位爲秒)    
——————–    
eaccelerator.shm_prune_period=」0″    
解釋:當沒有足夠的空閒共享內存去嘗試緩衝一個新腳本時,將刪全部舊腳本,前提是這個嘗試在超過shm_prune_period秒以前被執行過。默認值爲」0″,表示不嘗試從共享內存中刪除任何舊的腳本。(單位爲秒)    
——————–    
eaccelerator.shm_only=」0″    
解釋:打開或者關閉在磁盤上緩存編譯過的腳本。這個參數對會話數據和內容緩存沒有效果。默認值爲」0″,表示使用磁盤和共享內存來緩存。    
——————–    
eaccelerator.compress=」1″    
解釋:打開或者關閉緩存內容壓縮。」1″指打開,」0″指關閉。默認值爲」1″。    
——————–    
eaccelerator.compress_level=」9″    
解釋:內存壓縮的級別。默認值爲」9″,表示最大壓縮。

#這個是我機器的so位置  
extension=」/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so」    
#這個是設置一個緩存大小    
eaccelerator.shm_size=」64″    
#緩存目錄    
eaccelerator.cache_dir=」/usr/local/webserver/eaccelerator_cache」 實際配置不建議放在WEB目錄下,考慮到安全因素建議放到web目錄之外

#網站目錄,把解開的eAccelerator 的源碼包裏的control.php 文件複製到你的WEB 服務器中的一個目錄下,使其它以經過http 訪問,若是不加那麼看不到緩存的頁面列表,可是仍是能夠看到內存信息

eaccelerator.allowed_admin_path=/usr/www/

eaccelerator.enable=」1″  
eaccelerator.optimizer=」1″ (若是沒有安裝optimizer請設置爲0關閉加速引擎,不然會出現PHP腳本錯誤)    
eaccelerator.check_mtime=」1″    
eaccelerator.debug=」0″    
eaccelerator.filter=」"    
eaccelerator.shm_max=」0″    
eaccelerator.shm_ttl=」0″    
eaccelerator.shm_prune_period=」0″    
eaccelerator.shm_only=」0″    
eaccelerator.compress=」1″    
eaccelerator.compress_level=」9″

eaccelerator.keys     = 「disk_only」  
eaccelerator.sessions = 「disk_only」    
eaccelerator.content  = 「disk_only」

設置內容緩存的存放的地方,能夠設置爲:  
shm_and_disk 在共享緩存和硬盤(默認值)    
shm      默認存在共享內存,若是共享內存已滿或大小超過 「eaccelerator.shm_max」 的值,就存到硬盤    
shm_only    只存放在共享內存    
disk_only    只存放在硬盤    
none      不緩存數據

這裏爲了查看效果設置爲存在硬盤

增長權限

#mkdir /usr/local/webserver/eaccelerator_cache  
#chmod 777 /usr/local/webserver/eaccelerator_cache

3.測試查看phpinfo()

4.查看緩存文件夾

爲了直觀因此截圖圖形界面

這說明成功生成了緩存

5.更好的監控方式

eAccelerator控制面板的地址,安裝包裏有一個control.php文件,把它複製到網站的任意目錄,能夠用它查看和管理,這個必須指定,不然查看緩存內容的時候會出錯,訪問時候默認的用戶名是:admin,密碼:eAccelerator

注意,以前的php.ini配置文件加上這個配置就會看到明細信息

eaccelerator.allowed_admin_path=/usr/www/

重啓apache則會清空緩存

文檔:

eaccelerator.shm_size=」8″    
eAccelerator 可使用的共享內存的數量 (以MB爲單位) . 「0″ 是指操做系統的默認值,默認值是 「0″,可根據服務器的實際狀況來調整:1六、3二、6四、128都是能夠的。

eaccelerator.cache_dir=」/usr/local/webserver/eaccelerator_cache」    
這個目錄是給磁盤緩存使用,eAccelerator 在這裏儲存預先編譯好的代碼,進程數據,內容以及用戶的自定義內容。一樣的數據也能被儲存在共享內存中 (這樣能夠提升訪問速度)

eaccelerator.enable=」1″    
開啓或關閉 eAccelerator,」1″ 爲開啓,」0″ 爲關閉。默認值爲 「1″。

eaccelerator.optimizer=」1″ (若是沒有安裝optimizer請設置爲0關閉加速引擎,不然會出現PHP腳本錯誤)    
啓或關閉內部優化器,能夠提高代碼執行速度。」1″ 爲開啓,」0″ 爲關閉。默認值爲 「1″。

eaccelerator.check_mtime=」1″    
打開或者關閉 PHP 的文件修改檢查,」1″ 是指打開,」0″ 是指關閉。默認值是 「1″。

eaccelerator.debug=」0″    
開啓或關閉調試日誌記錄。」1″ 爲開啓,」0″ 爲關閉。默認值爲 「0″。會將緩存命中得記錄寫入日誌。

eaccelerator.filter=」"    
判斷哪些 PHP 文件必須緩存。能夠指定緩存和不緩存的文件類型(如 「*.php *.phtml」等)若是參數以 「!」 開頭,則匹配這些參數的文件被忽略緩存。默認值爲 「」,即,全部 PHP 文件都將被緩存。

eaccelerator.shm_max=」0″    
當使用 」 eaccelerator_put() 」 函數時禁止其向共享內存中存儲過大的文件。該參數指定容許存儲的最大值,單位:字節 (10240, 10K, 1M)。」0″ 爲不限制。默認值爲 「0″。

eaccelerator.shm_ttl=」3600″    
當 eAccelerator 獲取新腳本的共享內存大小失敗時,它將從共享內存中刪除全部在最後 「shm_ttl」 秒內沒有存取的腳本緩存。默認值爲」0″,爲不從共享內存中刪除任何緩存文件。

eaccelerator.shm_prune_period=」3600″    
當 eAccelerator 獲取新腳本的共享內存大小失敗時,他將試圖從共享內存中刪除早於」shm_prune_period」 秒的緩存腳本。默認值爲 「0″,爲不從共享內存中刪除任何緩存文件。

eaccelerator.shm_only=」0″    
容許或禁止將已編譯腳本緩存在磁盤上。該選項對 session 數據和內容緩存無效。默認值爲 「0″,爲使用磁盤和共享內存進行緩存。

eaccelerator.compress=」1″    
容許或禁止壓縮內容緩存。默認值爲 「1″,爲容許壓縮。

eaccelerator.compress_level=」9″    
指定內容緩存的壓縮等級。默認值爲 「9″,爲最高等級。

eaccelerator.keys = 「disk_only」    
eaccelerator.sessions = 「disk_only」      
eaccelerator.content = 「disk_only」      
設置內容緩存的存放的地方,能夠設置爲:    
shm_and_disk 在共享緩存和硬盤(默認值)    
shm      默認存在共享內存,若是共享內存已滿或大小超過 「eaccelerator.shm_max」 的值,就存到硬盤    
shm_only    只存放在共享內存    
disk_only    只存放在硬盤    
none      不緩存數據

6.測試性能

快速排序代碼

<?php

function quickSort($arr)

{

$len = count($arr);

if($len <= 1) {

return $arr;

}

$key = $arr[0];

$left_arr = array();

$right_arr = array();

for($i=1; $i<$len; $i++){

if($arr[$i] <= $key){

$left_arr[] = $arr[$i];

} else {

$right_arr[] = $arr[$i];

}

}

$left_arr = quickSort($left_arr);

$right_arr = quickSort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

$arr = array(6,3,8,5,9,2,10);

echo '<pre>';

print_r(quickSort($arr));

?>

測試方法

#ab -n 1000 http://192.168.2.107/quicksort.php

連續測試幾回,主要的性能指標是Requests per second

左邊是沒有使用eAccelerator 時的狀況,右邊是使用了的

連續測試10次,基本數據仍是比較穩定的。

使用了eAccelerator 時比沒使用的要好!

使用strace查看C語言級別的php源碼      

能夠看eAccelerator緩存是怎麼被讀取的完成過程

擴展閱讀:

eAccelerator提供以下的API接口和文件:(下述文件均在源碼包的doc/php/目錄下)

文件列表:

cache.php

dasm.php

encoder.php

info.php

loader.php

session.php

shared_memory.php

接口列表:

array eaccelerator_cached_scripts ()

void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])

void eaccelerator_cache_page (string $key, [int $ttl = 0])

void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])

void eaccelerator_caching (boolean $flag)

void eaccelerator_clean ()

void eaccelerator_clear ()

array eaccelerator_dasm_file (mixed $filename)

mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])

void eaccelerator_gc ()

mixed eaccelerator_get (string $key)

array eaccelerator_info ()

array eaccelerator_list_keys ()

void eaccelerator_load ()

boolean eaccelerator_lock (string $key)

void eaccelerator_optimizer (boolean $flag)

void eaccelerator_purge ()

boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])

array eaccelerator_removed_scripts ()

boolean eaccelerator_rm (string $key)

void eaccelerator_rm_page (string $key)

boolean eaccelerator_set_session_handlers ()

boolean eaccelerator_unlock (string $key)

有關上述文檔詳細說明請參考官方文檔

下面有部分網友翻譯後的接口說明:

eaccelerator_put($key, $value, $ttl=0)    
   將 $value 以 $key 爲鍵名存進緩存(php4下支持對像類型,看源碼好像zend2裏不支持了),$ttl 是這個緩存的生命週期,單位是秒,省略該參數或指定爲 0 表示不限時,直到服務器重啓清空爲止。      
eaccelerator_get($key)      
   根據 $key 從緩存中返回相應的 eaccelerator_put() 存進去的數據,若是這項緩存已通過期或不存在那麼返回值是 NULL      
eaccelerator_rm($key)      
   根據 $key 移除緩存      
eaccelerator_gc()      
   移除清理全部已過時的 key      
eaccelerator_lock($key)      
   爲 $key 加上鎖定操做,以保證多進程多線程操做時數據的同步。須要調用 eaccelerator_unlock($key) 來釋放這個鎖或等待程序請求結束時自動釋放這個鎖。      
   例如:      
   <?php      
     eaccelerator_lock(「count」);      
     eaccelerator_put(「count」,eaccelerator_get(「count」)+1));      
   ?>      
eaccelerator_unlock($key)      
   根據 $key 釋放鎖      
eaccelerator_cache_output($key, $eval_code, $ttl=0)      
   將 $eval_code 代碼的輸出緩存 $ttl 秒,($ttl參數同 eacclerator_put)      
   例如:      
   <?php eaccelerator_cache_output(‘test’, ‘echo time(); phpinfo();’, 30); ?>      
eaccelerator_cache_result($key, $eval_code, $ttl=0)      
   將 $eval_code 代碼的執行結果緩存 $ttl 秒,($ttl參數同 eacclerator_put),相似 cache_output      
   例如:      
   <?php eaccelerator_cache_result(‘test’, ‘ time() . 「Hello」;’, 30); ?>      
eaccelerator_cache_page($key, $ttl=0)      
   將當前整頁緩存 $ttl 秒。      
   例如:      
   <?php      
     eaccelerator_cache_page($_SERVER['PHP_SELF'].’?GET=’.serialize($_GET),30);      
     echo time();      
     phpinfo();      
   ?>      
eaccelerator_rm_page($key)      
   刪除由  eaccelerator_cache_page() 執行的緩存,參數也是 $key

二、PHP代碼中使用eAccelerator加速

另外,在PHPCMS裏面已經集成了對eAccelerator的支持,下面是一段來自PHPCMS裏面的代碼

class cache
{
    function __construct()
    {
    }

    function cache()
    {
		$this->__construct();
    }

    function get($name)
    {
        return eaccelerator_get($name);
    }

    function set($name, $value, $ttl = 0)
    {
        eaccelerator_lock($name);
        return eaccelerator_put($name, $value, $ttl);
    }

    function rm($name)
    {
        return eaccelerator_rm($name);
    }

    function clear()
    {
        return eaccelerator_gc();
    }
}

新一代 PHP 加速插件 Zend Opcache

你們知道目前PHP的緩存插件通常有三個:APCeAcceleratorXCache,但將來它們可能都會消失,由於PHP 5.5已經集成Zend Opcache,功能和前三者類似但又有少量不一樣,緩存速度聽說比它們更快(注意:只是聽說,我沒測試過)。

這幾個PHP加速插件的主要原理都相同,就是把PHP執行後的數據緩衝到內存中從而避免重複的編譯過程,可以直接使用緩衝區已編譯的代碼從而提升速 度,下降服務器負載,它們的效率是顯而易見的,像drupal這種龐大的CMS,每次打開一個頁面要調用數十個PHP文件,執行數萬行代碼,效率可想而 知,在安裝APC等加速器後打開頁面的速度明顯加快。

Zend Opcache 已經集成在了PHP 5.5裏面,編譯安裝PHP5.5的時候加上–enable-opcache就好了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,將來會取消對5.2的支持,下面是我在PHP 5.4下的安裝方法:

依次執行下面的命令

wget http://pecl.php.net/get/zendopcache-7.0.2.tgz

tar xzf zendopcache-7.0.2.tgz

cd zendopcache-7.0.2

/usr/local/php/bin/phpize (此處根據實際php安裝路徑)

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

若是顯示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安裝完成,下面要修改php的配置文件讓它生效

接着呢,配置下php.ini,在最後加上:

[opcache]

zend_extension=opcache.so

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.enable_cli=1

opcache.enable=1

通常來講,按照以往的經驗,若是加在ZendGuardLoader以前會穩定多了。

128意思是給它分配128M內存,而後重啓apache,用phpinfo查看是否生效,顯示下面的信息就說明生效了

在phpinfo頁面的下面能夠看到的運行狀態

若是嫌這個不直觀能夠裝個PHP文件查看,地址在https://gist.github.com/ck-on/4959032,把上面的代碼保存爲一個php文件放到你的網站目錄下面打開就能夠看到:

命中率100%。 轉載:http://my.oschina.net/angelangel/blog/338458

相關文章
相關標籤/搜索