1. 程式人生 > >使用opcache為你的網站加速(轉載)

使用opcache為你的網站加速(轉載)

步驟 測試 lib function all 很多 ria .net res

[文章作者:磨延城 轉載請註明原文出處: 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為你的網站加速(轉載)