opcache php性能提高用法小結

簡介

當解釋器完成對腳本代碼的分析後,便將它們生成能夠直接運行的中間代碼,也稱爲操做碼(Operate Code,opcode)。Opcode cache的目地是避免重複編譯,減小CPU和內存開銷,OPcache 經過將 PHP 腳本預編譯的字節碼存儲到共享內存中來提高 PHP 的性能, 存儲預編譯字節碼的好處就是 省去了每次加載和解析 PHP 腳本的開銷。php

工做原理

PHP執行代碼會通過以下4個步驟(zend) input(PHP代碼)->詞法分析 ->語法分析 ->opcode ->Zend engine- >output
php執行步驟
增長opcache以後,會變成如下步驟:
輸入圖片說明html

安裝

PHP 5.5+之後內建了opcache,編譯安裝的時候--enable-opcache 就能夠了。 其它版本須要下載和編譯git

  1. 下載
    https://pecl.php.net/package/ZendOpcache 7.0.4.tgz 官網
  2. 編譯擴展
wget https://pecl.php.net/get/zendopcache-7.0.4.tgz
 tar xzf zendopcache-7.0.4.tgz
 cd zendopcache-7.0.4
 /usr/local/bin/phpize
 ./configure --with-php-config=/usr/local/bin/php-config
 make && make install
  1. 增長如下代碼到php.ini文件中
[opcache] 
zend_extension=opcache.so
  1. 重啓 php
service php-fpm restart

輸入圖片說明
opcache安裝成功github

使用

配置參數

opcache.enable=1  #開關 默認打開
opcache.enable_cli=1 #
opcache.validate_timestamps=1     # 默認1 若是置爲1,則OPCACHE會自動檢測文件的時間戳(檢測週期爲revalidate_freq),
opcache.memory_consumption=128    # 可用內存 單位M
opcache.revalidate_freq=60        # 多少秒檢測下php文件是否變更
opcache.optimization_level=1 
opcache.error_log=/opt/logs/php/php_opcache.log #opcache 錯誤日誌
opcache.log_verbosity_level =1 #將錯誤信息都導向 Web 服務器日誌.默認的只有致命錯誤(level 0) 或者錯誤(level 1)纔會被記錄.
opcache.max_wasted_percentage=5   #「浪費」的內存達到此值對應的百分比,就會發起一個重啓調度 
opcache.interned_strings_buffer=8 #interned string的內存大小
opcache.max_accelerated_files=4096 # 文件數量 
opcache.max_file_size=0           #被cache的文件的最大size,單位bytes。0表示不限
opcache.fast_shutdown=1           #打開時可以使php在request shutdown時回收內
opcache.force_restart_timeout=30  #若是opcache處於非active狀態,當N秒後opcache將自動重啓

能夠根據圖形展現界面的效果去調整參數.緩存

注意

典型的問題就是因爲opcache的緩存加速機制致使的代碼變動後沒法當即看到效果,因此在開發環境下能夠經過設置revalidate_freq時間,或者更新代碼後重啓php-fpm.
我的以爲最好的方式仍是上傳更新代碼後,自動執行一個腳本,調用opcache_reset()函數重置全部opcache緩存字節碼。服務器

<?php
if (extension_loaded('Zend OPcache')) {
  var_dump(opcache_reset());
}

圖形界面展現

https://github.com/rlerdorf/opcache-status
https://github.com/PeeHaa/OpCacheGUI函數

擴展閱讀

相關文章
相關標籤/搜索