使用opcache為你的網站加速(轉載)
[文章作者:磨延城 轉載請註明原文出處: https://mo2g.com/view/137/ ]
可能很多朋友在接觸PHP的時候或多或少了解到:PHP是腳本語言、一種解釋型語言,所以它不需要經過編譯就能運行,諸如此類. 這種說法雖然並不完全正確,但對於初學者來說,這麽理解或許還比較合適,不僅能快速入門,調試代碼還挺方便.但當你想要優化基於PHP開發的網站,以支持更高的並發訪問時,就得了解什麽是Opcodes.
可能很多朋友在接觸PHP的時候或多或少了解到:PHP是腳本語言、一種解釋型語言,所以它不需要經過編譯就能運行,諸如此類。
這種說法雖然並不完全正確,但對於初學者來說,這麽理解或許還比較合適,不僅能快速入門,調試代碼還挺方便。但當你想要優化基於PHP開發的網站,以支持更高的並發訪問時,就得了解什麽是Opcodes。
默認情況,PHP對每一個請求,都會進行代碼解析、編譯等一系列處理生成對應的操作碼,最後通過Zend引擎執行。如圖所示:
引用Laruence的例子:
1 2 3 4 5 |
<?php
echo "Hello World" ;
$a = 1 + 1;
echo $a ;
?>
|
PHP執行這段代碼會經過如下4個步驟(確切的來說,應該是PHP的語言引擎Zend)
1.Scanning(Lexing) ,將PHP代碼轉換為語言片段(Tokens)
2.Parsing, 將Tokens轉換成簡單而有意義的表達式
3.Compilation, 將表達式編譯成Opocdes
4.Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。
Opcodes緩存的作用正是把編譯好的操作碼保存一段時間,讓Zend引擎在之後的請求中不用再次解析、編譯。如圖所示:
當你在苦苦尋求加快PHP網站響應速度的方法時,我敢說緩存Opcodes就是你要找的方法之一,而且是最容易的。
本文介紹如何使用Opcache(原名Zend Optimizer Plus,簡稱O+)給PHP程序加速。O+是由Zend公司開發的一個PHP性能提升工具,不同於其他Opcodes緩存工具, O+除了緩存Opcodes以外, 還做了很多的Opcodes優化。
從PHP5.5開始, O+已經隨著PHP的源代碼一起發布了。5.2以上的PHP版本也可以通過編譯的方式,加載O+。下載地址http://pecl.php.net/zendopcache
相同配置下,使用Apache Benchmark進行壓力測試,O+的優化效果對比如下:
ab -c50 -t2 10.0.0.59/ab_test.php
開啟O+:Requests per second: 168.77 [#/sec] (mean)
關閉O+:Requests per second: 157.44 [#/sec] (mean)
提高了11.33
ab_test.php代碼如下:
1 2 3 4 5 6 7 8 9 |
<?php
$x = 10000;
$arr = array ();
while ( $x ) {
$arr [ $x ] = $x --;
}
foreach ( $arr as $row ) {
echo "$row<br>" ;
}
|
接下來就把我的安裝流程貼出來,因為我是用yum搭建環境的,可能不適用於你的情況,僅供參考。
1)下載、編譯、安裝
1 2 3 4 5 6 7 |
wget http: //pecl .php.net /get/zendopcache-7 .0.3.tgz
tar zxvf zendopcache-7.0.3.tgz
cd zendopcache-7.0.3/
phpize
. /configure
make
make install
|
2)編輯php.ini,在文件底部添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
vi /etc/php .ini
zend_extension= /usr/lib64/php/modules/opcache .so
;命令行模式是否開啟緩存功能,我建議不開啟
opcache.enable_cli=0
;共享內存大小, 這個根據你們的需求可調
opcache.memory_consumption=128
;interned string的內存大小, 也可調
opcache.interned_strings_buffer=8
;最大緩存的文件數目
opcache.max_accelerated_files=4000
;60s檢查一次文件更新
opcache.revalidate_freq=60
;打開快速關閉, 打開這個在PHP Request Shutdown的時候,回收內存的速度會提高
opcache.fast_shutdown=1
;不保存文件/函數的註釋
opcache.save_comments=0
|
3)讓php-fpm重新加載配置文件
1 |
/ect/init .d /php-fpm reload
|
4)運行如下代碼
1 2 |
<?php
phpinfo();
|
如果能找到類似的文字提示,說明PHP已經成功加載了OPcache。馬上體驗一下,PHP網站是不是響應更快了呢?
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
使用opcache為你的網站加速(轉載)