啟用OPCache提高PHP程序性能的方法
說明
PHP 5.5+版本以上的,可以使用PHP自帶的opcache開啟性能加速(默認(rèn)是關(guān)閉的)。對于PHP 5.5以下版本的,需要使用APC加速,這里不說明,可以自行上網(wǎng)搜索PHP APC加速的方法。
opcache是Zend Optimizer編譯到php環(huán)境中的名字,意思即優(yōu)化緩存。Zend OPcache 通過將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是省去了每次加載和解析 PHP 腳本的開銷。
這個(gè)PHP加速插件的主要原理就是把PHP執(zhí)行后的數(shù)據(jù)緩沖到內(nèi)存中從而避免重復(fù)的編譯過程,能夠直接使用緩沖區(qū)已編譯的代碼從而提高速度,降低服務(wù)器負(fù)載,它們的效率是顯而易見的。
在 PHP 5.5及以后的版本中 OpCache 已內(nèi)建該模塊,在編譯安裝php時(shí)使用 --enable-opcache 即可在以后的開發(fā)工作中正常使用Opcache了。
(1)在命令行下可通過如下命令檢查是否已經(jīng)安裝了OPcache:
php -m | grep "OPcache"
有結(jié)果則代表已安裝了。
(2)安裝OPCache模塊
如果你的php環(huán)境沒有安裝該模塊,也可以通過如下方法進(jìn)行安裝:
依次執(zhí)行下面的命令
wget http://pecl.php.net/get/zendopcache-7.0.2.tgz tar xzf zendopcache-7.0.2.tgz cd zendopcache-7.0.2 phpize
(如果不知道 phpize 在哪里的話可以通過 find 命令進(jìn)行查找,也可以找到PHP路徑,通常是在一起的,我的就在/alidata/server/php/bin/phpize,下面這行也要按你的php.ini路徑自行修改)
./configure --with-php-config=/usr/local/php/bin/php-config make make install
如果顯示Installing shared extensions: /alidata/server/php/lib/php/extensions/no-debug-zts-20100525/ 則表示安裝成功了。
(3)開啟OPCache模塊支持
找到php.ini文件,在文件末尾加上如下代碼(如果已經(jīng)存在[opcache]這個(gè)標(biāo)簽了,則只需在這個(gè)標(biāo)簽下做相應(yīng)的添加或者修改):
[opcache] ; dll地址 zend_extension=php_opcache.dll ; 開關(guān)打開 opcache.enable=1 ; 開啟CLI opcache.enable_cli=1 ; 可用內(nèi)存, 酌情而定, 單位為:Mb opcache.memory_consumption=128 ; Zend Optimizer + 暫存池中字符串的占內(nèi)存總量.(單位:MB) opcache.interned_strings_buffer=8 ; 對多緩存文件限制, 命中率不到 100% 的話, 可以試著提高這個(gè)值 opcache.max_accelerated_files=10000 ; Opcache 會(huì)在一定時(shí)間內(nèi)去檢查文件的修改時(shí)間, 這里設(shè)置檢查的時(shí)間周期, 默認(rèn)為 2, 定位為秒 opcache.revalidate_freq=1 ; 打開快速關(guān)閉, 打開這個(gè)在PHP Request Shutdown的時(shí)候回收內(nèi)存的速度會(huì)提高 opcache.fast_shutdown=1 ; 不保存文件/函數(shù)的注釋 opcache.save_comments=0
添加完畢重啟apache或者nginx服務(wù)器,打開phpinfo頁面看看是否已經(jīng)生效,如果看到如下信息則代表已經(jīng)配置成功了。

(4)功能測試以及注意事項(xiàng)
在phpinfo()信息中, 目前來看有兩條信息猶為重要:
- Cache hits (高級(jí)緩存命中)
- Cache misses (高級(jí)緩存未命中)
通過這兩條信息中即可觀察緩存運(yùn)行情況。
我們做個(gè)測試,驗(yàn)證一下什么是opcache,新建包含如下代碼的一個(gè)文件:
echo 'hello opcache';
這是一段非常簡單的php代碼,請保存為demo.php文件然后訪問,隨意刷新,Cache hits數(shù)值會(huì)不停地增加,說明起作用了。
然后你修改代碼為:
echo 'hello codetc.com';
再刷新demo.php,應(yīng)該可以看到效果,打印出來的值仍然是 hello opcache,即源碼被緩存了,它不再解析demo.php文件。
那多少秒之后其結(jié)果才會(huì)變?yōu)?hello phpernote.com 呢?這里可通過設(shè)置:
opcache.force_restart_timeout=180
的時(shí)間來控制更新速度,這里的單位是秒,即180秒后重新編譯一次源php編碼。
這就類似于web項(xiàng)目中的靜態(tài)文件緩存一下,比如我們加載一個(gè)網(wǎng)頁,瀏覽器會(huì)自動(dòng)幫我們把jpg,css緩存起來,唯獨(dú)php沒有緩存,每次均需要open文件,解析代碼, 執(zhí)行代碼這一過程,而opcache即可解決這個(gè)問題,代碼會(huì)被高速緩存起來,提升訪問速度。
所以當(dāng)改變PHP文件代碼后,并不能立即看到效果,這視opcache.revalidate_freq的更新周期而定,所以建議在項(xiàng)目更新執(zhí)行自動(dòng)化腳本利用opcache_reset()函數(shù)自動(dòng)重置opcache。OPcache總共提供了如下幾個(gè)函數(shù):
- opcache_compile_file — 無需運(yùn)行,即可編譯并緩存 PHP 腳本
- opcache_get_configuration — 獲取緩存的配置信息
- opcache_get_status — 獲取緩存的狀態(tài)信息
- opcache_invalidate — 廢除腳本緩存
- opcache_reset — 重置字節(jié)碼緩存的內(nèi)容
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
php鏈?zhǔn)讲僮鞯膶?shí)現(xiàn)方式分析
這篇文章主要介紹了php鏈?zhǔn)讲僮鞯膶?shí)現(xiàn)方式,結(jié)合實(shí)例形式對比分析了常規(guī)調(diào)用與鏈?zhǔn)秸{(diào)用操作的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
PHP設(shè)計(jì)模式之抽象工廠模式實(shí)例分析
這篇文章主要介紹了PHP設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式分析了php抽象工廠模式的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
PHP將session信息存儲(chǔ)到數(shù)據(jù)庫的類實(shí)例
這篇文章主要介紹了PHP將session信息存儲(chǔ)到數(shù)據(jù)庫的類,實(shí)例分析了php封裝的session信息存儲(chǔ)到數(shù)據(jù)庫的類,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
php中修改瀏覽器的User-Agent來偽裝你的瀏覽器和操作系統(tǒng)
修改瀏覽器的User-Agent來偽裝你的瀏覽器和操作系統(tǒng),這兩種都可以得到User-Agents和IP等信息,最好配合正則表達(dá)式,對信息進(jìn)行篩選剔除。2011-07-07
PHP Laravel框架異步執(zhí)行的實(shí)現(xiàn)詳解
Laravel是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構(gòu)建一個(gè)完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達(dá)力2022-07-07
淺談php字符串反轉(zhuǎn) 面試中經(jīng)常遇到
下面小編就為大家分享一篇淺談php字符串反轉(zhuǎn) 面試中經(jīng)常遇到的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
PHP 優(yōu)化配置——加速你的VBB,phpwind,Discuz,IPB,MolyX
PHP 優(yōu)化配置——加速你的VBB,phpwind,Discuz,IPB,MolyX...2007-07-07
PHP setcookie() cannot modify header information 的解決方法
PHP setcookie() 報(bào) cannot modify header information 錯(cuò)誤的解決方法2009-01-01

