php opcache的配置

原理:
其實非常簡單,opcache只是把把PHP執行後的數據(opcode)緩存到內存中從而避免重複的編譯過程,能夠直接使用緩衝區已編譯的opcode代碼從而提高速度,降低服務器負載
效果:
在實際應用當中能使QPS數大致增加3倍以上
注意:
啓用opcache後,典型的問題就是由於opcache的緩存加速機制導致的代碼變更後無法立即看到效果。php代碼被轉換成可立即執行的“機器碼”後會有一定的緩存時間後纔會去檢查原始的PHP文件是否變動過,具體視配置項opcache.revalidate_freq設置的秒數情況而定;這樣就會導致某些情況下明明更新了PHP文件中的代碼,但執行後卻看不到改變後的效果,這就是因爲opcache檢查php文件變動的間隔時間尚未結束所導致。 這個問題並不是bug,而要視具體生產環境來設定opcache.revalidate_freq值,倘若php代碼很少變動,建議該值設置的大一些,可減少opcahce由於檢查php文件變動而帶來的額外開銷,比如7200 那麼在變動php文件後如何才能快速降低opcache緩存帶來的這種問題呢?最簡單的方法就是更新代碼後重啓下php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。當然還可以自己書寫一個php腳本,調用opcache_reset()函數重置所有opcache緩存字節碼,或者使用opcache_invalidate(PHPfileDir,true)重置指定php文件的緩存字節碼。
參數說明:
  1. [Zend Opcache]
  2. zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
  3. opcache.enable=1 ;啓用操作碼緩存
  4. opcache.enable_cli=1 ;僅針對CLI環境啓用操作碼緩存
  5. opcache.memory_consumption=128 ;共享內存大小,單位MB
  6. opcache.interned_strings_buffer=8 ;存儲臨時字符串的內存大小,單位MB
  7. opcache.max_accelerated_files=4000 ;哈希表中可存儲的腳本文件數量上限
  8. ;opcache.max_wasted_percentage=5 ;浪費內存的上限,以百分比計
  9. ;opcache.use_cwd=1;附加改腳本的工作目錄,避免同名腳本衝突
  10. opcache.validate_timestamps=1 ;每隔revalidate_freq 設定的秒數 檢查腳本是否更新
  11. opcache.revalidate_freq=60 ;
  12. ;opcache.revalidate_path=0 ;如果禁用此選項,在同一個 include_path 已存在的緩存文件會被重用
  13. ;opcache.save_comments=1 ;禁用後將也不會加載註釋內容
  14. opcache.fast_shutdown=1 ;一次釋放全部請求變量的內存
  15. opcache.enable_file_override=0 ; 如果啓用,則在調用函數file_exists(), is_file() 以及 is_readable() 的時候, 都會檢查操作碼緩存
  16. ;opcache.optimization_level=0xffffffff ;控制優化級別的二進制位掩碼。
  17. ;opcache.inherited_hack=1 ;PHP 5.3之前做的優化
  18. ;opcache.dups_fix=0 ;僅作爲針對 “不可重定義類”錯誤的一種解決方案。
  19. ;opcache.blacklist_filename="" ;黑名單文件爲文本文件,包含了不進行預編譯優化的文件名
  20. ;opcache.max_file_size=0 ;以字節爲單位的緩存的文件大小上限
  21. ;opcache.consistency_checks=0 ;如果是非 0 值,OPcache 將會每隔 N 次請求檢查緩存校驗和
  22. opcache.force_restart_timeout=180 ; 如果緩存處於非激活狀態,等待多少秒之後計劃重啓。
  23. ;opcache.error_log="" ;OPcache模塊的錯誤日誌文件
  24. ;opcache.log_verbosity_level=1 ;OPcache模塊的日誌級別。致命(0)錯誤(1) 警告(2)信息(3)調試(4)
  25. ;opcache.preferred_memory_model="" ;OPcache 首選的內存模塊。可選值包括: mmap,shm, posix 以及 win32。
  26. ;opcache.protect_memory=0 ;保護共享內存,以避免執行腳本時發生非預期的寫入。 僅用於內部調試。
  27. ;opcache.mmap_base=null ;在Windows 平臺上共享內存段的基地址
配置參考:

[opcache]zend_extension = "G:/PHP/php-5.5.6-Win32-VC11-x64/ext/php_opcache.dll" ; Zend Optimizer + 的開關, 關閉時代碼不再優化.opcache.enable=1 ; Determines if Zend OPCache is enabled for the CLI version of PHPopcache.enable_cli=1  ; Zend Optimizer + 共享內存的大小, 總共能夠存儲多少預編譯的 PHP 代碼(單位:MB); 推薦 128opcache.memory_consumption=64 ; Zend Optimizer + 暫存池中字符串的佔內存總量.(單位:MB); 推薦 8opcache.interned_strings_buffer=4  ; 最大緩存的文件數目 200100000 之間; 推薦 4000opcache.max_accelerated_files=2000 ; 內存“浪費”達到此值對應的百分比,就會發起一個重啓調度.opcache.max_wasted_percentage=5 ; 開啓這條指令, Zend Optimizer + 會自動將當前工作目錄的名字追加到腳本鍵上,; 以此消除同名文件間的鍵值命名衝突.關閉這條指令會提升性能,; 但是會對已存在的應用造成破壞.opcache.use_cwd=0  ; 開啓文件時間戳驗證 opcache.validate_timestamps=1  ; 2s檢查一次文件更新 注意:0是一直檢查不是關閉; 推薦 60opcache.revalidate_freq=2 ; 允許或禁止在 include_path 中進行文件搜索的優化;opcache.revalidate_path=0  ; 是否保存文件/函數的註釋 如果apigen、Doctrine、 ZF2、 PHPUnit需要文件註釋; 推薦 0opcache.save_comments=1 ; 是否加載文件/函數的註釋;opcache.load_comments=1  ; 打開快速關閉, 打開這個在PHP Request Shutdown的時候會收內存的速度會提高; 推薦 1opcache.fast_shutdown=1 ;允許覆蓋文件存在(file_exists等)的優化特性。;opcache.enable_file_override=1  ; 定義啓動多少個優化過程;opcache.optimization_level=0xffffffff  ; 啓用此Hack可以暫時性的解決”can’t redeclare class”錯誤.;opcache.inherited_hack=1 ; 啓用此Hack可以暫時性的解決”can’t redeclare class”錯誤.;opcache.dups_fix=0 ; 設置不緩存的黑名單; 不緩存指定目錄下cache_開頭的PHP文件. /png/www/example.com/public_html/cache/cache_ ;opcache.blacklist_filename=  ; 通過文件大小屏除大文件的緩存.默認情況下所有的文件都會被緩存.;opcache.max_file_size=0 ; 每 N 次請求檢查一次緩存校驗.默認值0表示檢查被禁用了.; 由於計算校驗值有損性能,這個指令應當緊緊在開發調試的時候開啓.;opcache.consistency_checks=0 ; 從緩存不被訪問後,等待多久後(單位爲秒)調度重啓;opcache.force_restart_timeout=180 ; 錯誤日誌文件名.留空表示使用標準錯誤輸出(stderr).;opcache.error_log=  ; 將錯誤信息寫入到服務器(Apache等)日誌;opcache.log_verbosity_level=1 ; 內存共享的首選後臺.留空則是讓系統選擇.;opcache.preferred_memory_model= ; 防止共享內存在腳本執行期間被意外寫入, 僅用於內部調試.;opcache.protect_memory=0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章