opcache (全程 zend opcache):
從php5.5開始,默認提供的php腳本緩存擴展,編譯php5.5時加上參數--enable-opcache就可以編譯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文件的緩存字節碼。