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