您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)怎么使用OPCache提升PHP的性能的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
一、phpStudy,是一個(gè)新手入門最常用的開發(fā)環(huán)境。二、WampServer,WampServer也同樣的也是和phpStudy一樣操作簡單對小白比較友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一個(gè)功能強(qiáng)大的建站集成軟件包;四、MAMP,MAMP分為兩種MAMP和MAMP Pro for Mac。五、寶塔面板,寶塔面板是一款服務(wù)器管理軟件,支持windows和linux系統(tǒng)。六、UPUPW,UPUPW是目前Windows平臺(tái)下最具特色的Web服務(wù)器PHP套件。
OPcache 通過將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 PHP 腳本的開銷。
這是 PHP 文檔中關(guān)于 OPcache 的簡介,也就是說,OPcache 節(jié)約了每次加載和解析的步驟,將第一次解析編譯后的腳本字節(jié)碼緩存到系統(tǒng)的共享內(nèi)存中。其實(shí),這就類似于一個(gè)不完全的編譯。
類似于 Java 之類的語言,都是要打包編譯之后才能上線運(yùn)行的,比如打包成一個(gè) jar包 。C++ 或 C# 可以打包成一個(gè) .dll 或 .exe 。這些打包之后的文件就是編譯完成的文件,將它們運(yùn)行起來后一般會(huì)一直保持運(yùn)行狀態(tài),也就是會(huì)成為一個(gè)常駐進(jìn)程,它們的代碼就進(jìn)入內(nèi)存中了。在程序運(yùn)行的時(shí)候,不需要再進(jìn)行解釋或編譯,自然速度就要快很多。而 OPcache 也是起到類似的作用。只不過它并不是完全的一套編譯流程,我們還是依賴的 PHP-FPM 來運(yùn)行腳本,只不過在開啟 OPcache 后,PHP-FPM 會(huì)先從內(nèi)存中查找是否已經(jīng)有相關(guān)的已經(jīng)緩存的字節(jié)碼在內(nèi)存中了,如果有的話就直接取用,如果沒有的話,會(huì)再次進(jìn)行解釋編譯后緩存下來。另外,OPcache 是針對文件的,也就是說,一個(gè)文件如果是新增加進(jìn)來的,只有運(yùn)行過它才會(huì)緩存,如果沒有運(yùn)行過,它并不在當(dāng)前的共享內(nèi)存中。
推薦學(xué)習(xí):《PHP視頻教程》
OPcache 已經(jīng)是 PHP 的官方擴(kuò)展并隨安裝包一起發(fā)布了,所以,我們可以在編譯安裝 PHP 時(shí)使用 --enable-opcache 來開啟擴(kuò)展,它已經(jīng)是默認(rèn)擴(kuò)展。也可以在未安裝 OPcache 的系統(tǒng)中使用安裝包中的文件來進(jìn)行安裝。
cd php-7.4.4/ext/opcache/ phpize ./configure make && make install
需要注意的是, OPcache 和 Xdebug 在生產(chǎn)環(huán)境中盡量不要一起使用。本身 Xdebug 就是不推薦在生產(chǎn)環(huán)境中使用的,如果一定需要同時(shí)使用的話,需要先加載 OPcache ,然后再加載 Xdebug 。
擴(kuò)展安裝后,在 php.ini 文件中打開擴(kuò)展。需要注意的是,OPcache 擴(kuò)展是 Zend 擴(kuò)展包,所以我們需要打開的是 Zend 擴(kuò)展。
zend_extension=opcache.so
另外,還需要啟用它。
opcache.enable=1
當(dāng)開啟了 OPcache 之后,我們再更新代碼將會(huì)發(fā)現(xiàn)剛剛更新的代碼不是我們最新的代碼。這是因?yàn)榇a已經(jīng)被緩存了,就像 Java 一樣,我們需要重啟服務(wù)才行。那么 PHP 這邊重啟的是什么呢?當(dāng)然就是重啟下我們的 PHP-FPM 就可以了,直接使用 kill -USR2 命令去重啟主進(jìn)程就行了。這里也給出一個(gè)快速重啟的命令。
ps -ef | grep "php-fpm: master" | grep -v grep | cut -c 9-15 | xargs kill -USR2
感謝知乎大佬的指正,重啟 PHP-FPM 不是最佳方案,應(yīng)該使用 opcache_reset() 手動(dòng)重啟,或者通過 php.ini 文件的配置 opcache.validate_timestamps + opcache.revalidate_freq 自動(dòng)間隔編譯,或者通過 opcache_compile_file() 來直接重新編譯修改過的文件
我們進(jìn)行測試的內(nèi)容是測試環(huán)境的一臺(tái)2核4G的服務(wù)器,使用的 PHP 版本是 PHP7.4 ,正常的 Nginx 及 PHP 配置, ulimit 也都開到了最大。代碼只是簡單的輸出了一行文字,不過我們使用的是一個(gè)簡單的 mvc 框架 ,也就是說這段代碼運(yùn)行起來至少也會(huì)加載幾個(gè)文件,而不是簡簡單單的一個(gè)文件。
首先我們來看未開啟 OPcache 的情況。
接下來是開啟了 OPcache 的情況。
很明顯,性能有了很大的提高。不僅速度快了很多,吞吐率也是直接上升了幾倍。當(dāng)然,這只是非常簡單的一個(gè)測試,不過總體看來,確實(shí)對單機(jī)的性能提升有很大的幫助。最最主要的是,同樣的并發(fā)情況下,CPU 資源也比未開啟的狀態(tài)下低了70%。
在 PHP 的官方文檔中,已經(jīng)為我們給出了一套默認(rèn)的 OPcache 在 php.ini 中的配置。經(jīng)過測試,基本沒什么問題,當(dāng)然,現(xiàn)在還沒有在生產(chǎn)環(huán)境中使用過,還需要進(jìn)行更多的測試。不過文檔中指出,這套配置是可以直接運(yùn)用到線上的,不過需要注意的是某些使用了注解之類功能的高級框架可能需要注意某些參數(shù)。
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
感謝各位的閱讀!關(guān)于“怎么使用OPCache提升PHP的性能”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。