《5分鐘搞懂OPcache(Optimized PHP Cache) PHP 內建的一個記憶體快取系統 – 學習筆記》

Telegram share !

OPcache 是 PHP 內建的一個記憶體快取系統的擴充套件,可以用來將 PHP 程式碼的 opcodes(優化後的程式碼) 編譯並快取在共享內存中,以提高 PHP 程式的執行速度。OPcache 可以有效地減少 PHP 程式的啟動時間和執行時間,從而提高網站的性能和響應速度,不會造成資料庫鎖表或效能下降,本筆記我會將我所知道的知識分享給大家參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。

OPcache主要功能是:

  1. 將 PHP 腳本編譯後的 opcodes(優化後的程式碼) 緩存在記憶體中,避免每次執行時都需要重新編譯。這樣可以大幅提升 PHP 應用程式的效能。
  2. 緩存 PHP 檔案的元資料(如修改時間、inode 等),避免每次都需要檢查檔案是否有修改。
  3. 支援自動無效化快取,當 PHP 檔案有修改時自動重新載入快取。
  4. 可以設置各種參數來控制快取行為,如快取大小、過期時間等。

啟動OPcache擴充套件

1.驗證 PHP 版本

root@ip-192-168-0-99:/# php -version
PHP 8.1.23 (cli) (built: Sep  2 2023 06:58:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.23, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.23, Copyright (c), by Zend Technologies
root@ip-192-168-0-99:/#

2.編輯 php.ini 文件來啟用 PHP OPcache

root@ip-192-168-0-99:/# vim /etc/php/8.1/fpm/php.ini

3.取消設定區段的 「;」註解

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2

4.重新啟動

root@ip-192-168-0-99:/# systemctl restart nginx php8.1-fpm

5.驗證 PHP OPcache是否有成功被啟動

root@ip-192-168-0-99:/# php -i | grep opcache
/etc/php/8.1/cli/conf.d/10-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => Off => Off
opcache.enable_file_override => Off => Off
opcache.error_log => no value => no value
opcache.file_cache => no value => no value
:
:
參數太多以下省略
root@ip-192-168-0-99:/# 

建立OPcache Web GUI方便管理

1.建立OPcache資料夾、設定權限

root@ip-192-168-0-99:/# mkdir -p /var/www/opcache.rdpapa.tw
root@ip-192-168-0-99:/# chown -R www-data:www-data /var/www/opcache.rdpapa.tw
root@ip-192-168-0-99:/# chmod -R 775 /var/www/opcache.rdpapa.tw

2. 建立 PHP OPcache 的狀態儀表板頁面

先到GitHub抓別人已經調整好的頁面=>參考連結

root@ip-192-168-0-99:/# cp index.php /var/www/opcache.rdpapa.tw

3.於nginx設定檔中,新增一個站台設定檔案

#建立nginx站台設定檔案
root@ip-192-168-0-99:/# vim/etc/nginx/sites-available/opcache.rdpapa.tw.conf
#opcache.rdpapa.tw.conf內容
server {
    listen 80;
    root /var/www/opcache.rdpapa.tw/;
    
    index index.php index.html index.htm;

    server_name opcache.rdpapa.tw;   

    location / {
	 
        try_files $uri $uri/ /index.php?$args ; 

    }
    
    location ~ \.php$ {
	include snippets/fastcgi-php.conf;
      	fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
   
    location ~ /\.(?!well-known).* {
         deny all;
         access_log off;
         log_not_found off;
    }

   location ~ /\.ht {
        deny all;
   }
}
#建立nginx站台軟連結至sites-enabled
root@ip-192-168-0-99:/# sudo ln -s /etc/nginx/sites-available/opcache.rdpapa.tw.conf /etc/nginx/sites-enabled/

4.重新抓取新的nginx設定檔至記憶體中

root@ip-192-168-0-99:/# systemctl reload nginx

5.可以測試OPcache看看目前Cache的收錄狀態

http://opcache.rdpapa.tw/index.php

※本範例中opcache.rdpapa.tw 可以換成你自己的網址

Reference

  • PHP OPcache 官方文件:連結
  • A clean, effective and responsive interface for Zend OPcache使用說明:連結