PHP使用Zend Opcache之优化加速和缓存清理总结
簡介
字節(jié)碼緩存不是php的新特性,有很多獨(dú)立性的擴(kuò)展可以實(shí)現(xiàn)緩存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等。但是到目前為止,這些獨(dú)立的擴(kuò)展并沒有集成到php核心當(dāng)中。所有在php5.5.0之后,php內(nèi)置了字節(jié)碼緩存功能,叫做Zend Opcache。
zend Opcache前身是Zend Optimizer +,在03年改名Opcache,通過opcode緩存和優(yōu)化提供更快的PHP執(zhí)行過程。他會將預(yù)編譯后的php文件存儲在共享內(nèi)存中以供以后的使用,避免從磁盤讀取文件在進(jìn)行解釋的重復(fù)過程,減少時間和內(nèi)存的消耗。在php5.5中及之后的版本中自帶了zend opcache模塊擴(kuò)展,但是需要使用時需要我們開啟和配置。在php5.2- 5.4版本我們也可以使用Opcache,但是需要我們自行安裝。
?
?
什么是操作碼緩存
那么什么是字節(jié)碼緩存呢?php是一門解釋型的語言,php解釋器執(zhí)行php腳本時會解析php腳本代碼,將php腳本代碼編譯成一系列可以直接運(yùn)行的中間代碼,也稱為操作碼(Operate Code,opcode)。然后執(zhí)行這些操作碼.
每次請求php文件都是這樣,所以會消耗很多資源,如果每次HTTP請求PHP都必須解析,編譯和運(yùn)行腳本,消耗的資源將會更多.
Opcode cache 的目地是避免重復(fù)編譯,減少 CPU 和內(nèi)存開銷。需要注意的是如果動態(tài)內(nèi)容的性能瓶頸不在于 CPU 和內(nèi)存,而在于 I/O 操作,比如數(shù)據(jù)庫查詢帶來的磁盤 I/O 開銷,那么 opcode cache 的性能提升是非常有限的.
現(xiàn)代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內(nèi)存進(jìn)行存儲,并且可以直接從中執(zhí)行文件,而不用在執(zhí)行前“反序列化”代碼。這將帶來顯著的性能加速,通常降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn).
?
?
安裝(php5.5.0以上跳過)
在PHP 5.5.0及之后版本中,PHP已經(jīng)將Opcache功能以拓展形式內(nèi)嵌在發(fā)布版本中了,默認(rèn)未開啟Opcache加速,需要我們手動開啟。對于之前的老版本,可以將Opcache作為PECL拓展庫進(jìn)行安裝和配置.
window下的安裝
1. 下載擴(kuò)展:https://windows.php.net/downloads/pecl/releases/opcache/
2. 將php_opcache.dll放進(jìn)php/ext目錄下
3. 修改php.ini下[php]配置(注意路徑要修改成你自己的):
[php] engine = On extension = php_opcache.dll zend_extension = "c:/xxx/php/ext/php_opcache.dll" 4. 添加php.ini下的[opcache]配置: [opcache] 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 5. 重啟apache服務(wù),檢查opcache是否開啟成功?
linux下的安裝
源碼安裝
wget http://pecl.php.net/get/zendopcache-7.0.5.tgz tar zxvf zendopcache-7.0.5.tgz cd zendopcache-7.0.5 /path/to/php/bin/phpize ./configure --with-php-config=/path/to/php/bin/php-config make && make install 在php.ini下的[php]添加如下配置: zend_extension=php_opcache.so 在php.ini的[opcache]下添加: 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 pecl 版本安裝 yum install php-pecl-zendopcache 安裝時產(chǎn)生的 opcache 的配置文件位于默認(rèn)的 /etc/php.d 目錄中: opcache-default.blacklist opcache.ini 修改該配置: vi /etc/php.d/opcache.ini 對照修改: 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 不需要修改php.ini,重啟apache服務(wù).?
常用配置
;開關(guān)打開 opcache.enable=1;開啟CLI opcache.enable_cli=1;可用內(nèi)存, 酌情而定, 單位為:Mb opcache.memory_consumption=528;Zend Optimizer + 暫存池中字符串的占內(nèi)存總量.(單位:MB) opcache.interned_strings_buffer=8;對多緩存文件限制, 命中率不到 100% 的話, 可以試著提高這個值 opcache.max_accelerated_files=10000;Opcache 會在一定時間內(nèi)去檢查文件的修改時間, 這里設(shè)置檢查的時間周期, 默認(rèn)為 2, 定位為秒 opcache.revalidate_freq=1;打開快速關(guān)閉, 打開這個在PHP Request Shutdown的時候回收內(nèi)存的速度會提高 opcache.fast_shutdown=1;檢查腳本時間戳是否有更新的周期,以秒為單位。設(shè)置為 0 會導(dǎo)致針對每個請求, OPcache 都會檢查腳本更新。 opcache.revalidate_freq=0 ;如果啟用,那么 OPcache 會每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。 ;如果禁用此選項,你必須使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來手動重置 OPcache,也可以 通過重啟 Web 服務(wù)器來使文件系統(tǒng)更改生效。 opcache.validate_timestamps=0 注意:如果設(shè)置opcache的opcache.validate_timestamps的指令設(shè)成0,那么zend opcache就察覺不到PHP腳本的變化,我們必須手動清空zend opcache緩存的字節(jié)碼,讓他發(fā)現(xiàn)php腳本的變動.這個設(shè)置適合在生產(chǎn)環(huán)境中設(shè)置成0,在開發(fā)環(huán)境下最好還是設(shè)置成1.我們可以這樣配置,啟用自動重新驗(yàn)證緩存功能:
opcache.validate_timestamps=1 opcache.revalidate_freq=0更多的配置指令可以看這里:http://php.net/manual/zh/opcache.configuration.php
?
常用函數(shù)
zend opcache使用很簡單,因?yàn)樗鼏雍髸詣舆\(yùn)行.zend opcache會自動在內(nèi)存中緩存預(yù)先編譯好的php字節(jié)碼,如果緩存了某個文件的字節(jié)碼,就執(zhí)行對應(yīng)的字節(jié)碼.常見的關(guān)于zend opcache擴(kuò)展的函數(shù):
opcache_compile_file($php_file); #預(yù)生成opcode緩存opcache_is_script_cached($php_file) #查看是否生成opcode緩存opcache_invalidate($php_file, true) #清除單個緩存opcache_reset(); #清空緩存opcache_get_status(); #獲取緩存的狀態(tài)信息opcache_get_configuration(); #獲取緩存的配置信息?
以上
來源:https://www.cnblogs.com/lishanlei/p/9548884.html
總結(jié)
以上是生活随笔為你收集整理的PHP使用Zend Opcache之优化加速和缓存清理总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opcache开启和关闭
- 下一篇: redis没有加密码导致服务器被当做矿机