單機優(yōu)化-Opcache

什么是opcache?

Opcache是一種通過將解析的PHP腳本預(yù)編譯的 字節(jié)碼(Operate Code)存放在 *共享內(nèi)存 *中來避免每次加載和解析PHP腳本的開銷,解析器可以直接從共享內(nèi)存讀取已經(jīng)緩存的字節(jié)碼(Operate Code),從而大大提高PHP的執(zhí)行效率。
存儲預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 PHP 腳本的開銷。

Opcache的安裝和使用

PHP 5.5.0 及后續(xù)版本中已經(jīng)綁定了 OPcache 擴展。 對于 PHP 5.2,5.3 和 5.4 版本可以使用 ? PECL 擴展中的 OPcache 庫。

安裝

OPcache 只能編譯為共享擴展。 如果你使用 --disable-all 參數(shù) 禁用了默認擴展的構(gòu)建, 那么必須使用 --enable-opcache 選項來開啟 OPcache。

# 當(dāng)你的PHP版本低于7.0時,你可以去http://pecl.php.net/package/ZendOpcache 根據(jù)自己的PHP版
# 本下載相應(yīng)的opcache版本。比如PHP5.5:http://pecl.php.net/get/zendopcache-7.0.5.tgz
tar -zxvf zendopcache-7.0.5.tgz
cd zendopcache-7.0.5
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
# 這時會在php的擴展文件夾內(nèi)生成opcache.so
# PHP7.0之后自帶opcache.so無需安裝

編譯之后,就可以使用 zend_extension 指令來將 OPcache 擴展加載到 PHP 中。在非 Windows 平臺使用 zend_extension=/full/path/to/opcache.so, Windows 平臺使用 zend_extension=C:\path\to\php_opcache.dll

配置參數(shù)

php.ini

關(guān)于opcache的詳細參數(shù)配置比較核心的參數(shù)如下:
opcache擴展位置
zend_extension=opcache.so
啟用opcache
opcache.enable=1
使用共享內(nèi)存大小
opcache.memory_consumption=128
字符串緩存大小
opcache.interned_strings_buffer=8
最大緩存文件數(shù)量
opcache.max_accelerated_files=4000
出現(xiàn)異常,立即釋放全部內(nèi)存
opcache.fast_shutdown=1
文件檢測周期
revalidate_freq=60

# 以下根據(jù)實際情況開啟
開啟cli模式
opcache.enable_cli=1
最大允許占用內(nèi)存百分比,超過此限制會重啟進程
opcache.max_wasted_percentage=20
如果置為1,則將當(dāng)前路徑加入到文件key中,以避免可能產(chǎn)生的同文件名的文件key沖突
opcache.use_cwd=1
啟用文件緩存時間戳
opcache.validate_timestamps=1

緩存清理

方法一:設(shè)置Opcache腳本驗證時間
revalidate_freq,默認2
檢查腳本時間戳是否有更新的周期,以秒為單位。 設(shè)置為 0 會導(dǎo)致針對每個請求, OPcache 都會檢查腳本更新
validate_timestamps,默認1
如果啟用,那么 OPcache 會每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。

方法二:手動清理緩存
使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來手動重置 OPcache

  • opcache_reset()- 重置整個Opcode緩存,所有的PHP腳本將會被重新解析再預(yù)編譯為Opcode。
  • opcache_invalidate() - 清除指定腳本緩存,可以傳遞兩個參數(shù),一個是刷新文件路徑,一個是force字段, 如果 force 沒有設(shè)置或者傳入的是 FALSE,那么只有當(dāng)腳本的修改時間 比對應(yīng)Opcode的時間更新時,腳本的緩存才會失效。

注意:當(dāng)PHP以PHP-FPM的方式運行的時候,opcache的緩存是無法通過php命令進行清除的,只能通過http或cgi到php-fpm進程的方式來清除緩存

方法三:重啟 | 重載 php-fpm 進程(非常不建議的方式)
每次重啟或重啟 php-fpm 進程便會重新解析PHP腳本文件,但是重啟 fpm 進程可能會導(dǎo)致請求中斷,從而導(dǎo)致寫入臟數(shù)據(jù) 或者 造成事務(wù)回滾等一系列異常。
重載相對于重啟則平順很多,不會導(dǎo)致用戶請求直接中斷,相對來說風(fēng)險低很多,但是php-fpm 收到reload信號,便會向所有子進程發(fā)送SIGGUIT信號,同時注冊一個定時器,在規(guī)定的時間之內(nèi)子進程沒有退出,接著在發(fā)送SIGTERM信號,結(jié)束子進程。如果在一秒之內(nèi)子進程還是沒結(jié)束 直接發(fā)送SIGKILL 強制殺死。

重啟php-fpm

  • service php-fpm restart
    重載php-fpm
  • services php-fpm reload
    或 kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PHP安裝指南 PHP介紹 PHP安裝 PHP配置 PHP啟動 一、PHP介紹 PHP(外文名:PHP: Hype...
    亮仔_c1b5閱讀 573評論 0 0
  • 重要的以粗體+斜體進行展示 php-fpm.conf emergency_restart_threshold = ...
    zhyke閱讀 459評論 1 0
  • PHP作為開源腳本語言,具有C、Perl、Java等編程語言的特性,由于引入了中間解釋層(Zend引擎),所以PH...
    JunChow520閱讀 680評論 0 5
  • 就業(yè)班(全程班)第十四周作業(yè) 1、簡述CGI與FASTCGI區(qū)別 現(xiàn)在的CGI基本沒人使用,不安全以及性能極其低下...
    布格雷斯閱讀 533評論 1 0
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_閱讀 2,044評論 0 3

友情鏈接更多精彩內(nèi)容