Zend Opcache Optimization

Zend Opcache 最佳化設定

Last Updated on October 21, 2022


Zend Opcache 是 PHP 一個加速模組,早期論壇盛行的時候,一定還記得要配置 eAccelerator 或 Xcache 來加速 PHP,讓論壇跑起來更順暢。

PHP 加速快取哪個好? 毫無疑問的免費的 Zend Opcache 是首選 (現在還有最新的 Relay),因為這是 PHP 官方出品的,在 PHP5.5 版開始,已經加在 PHP 的源代碼裡面了。

Zend Opcache

Zend Opcache 就不在多加介紹,Google 一下就有一卡車的教學說明,在這一篇主要是說明,實際的 VPS 主機設定,及如何提高 Zend Opcache 快取的命中率調整。

PHP 5.5 以上的版本編譯後,Zend Opcache 就已經存在了,目前可支援 PHP7.0 以上版本的加速模組,就只有 Zend Opcache 及 APCu,你可以用 phpinfo 去查看 Zend Opcache 狀態。

Zend Opcache 設定預設值:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=64
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=3000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.consistency_checks=0

512MB VPS 主機使用上面的配置,是沒甚麼問題,觀察 hits 命中率可以保持在 99%。但不是放著就不管,隨著網站的增加,觀察命中率的狀態而進行調整。

一般調整這下面兩個配置:

opcache.max_accelerated_files

控制一次最多可以加載多少個 PHP 文件到快取。

將這個值設置的比你的 PHP 文件多是非常重要的,預設值是 3000,可以使用使令查看,計算出你代碼倉庫裡有多少個文件。

find . -type f -print | grep php | wc -l

查詢 OPcache 哈希表中可存儲的腳本文件數量上限。

真實的取值是在質數集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個比設置值大的質數,設置值取值範圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之後是 1000000。

opcache.memory_consumption

預設值是 64M,可依你的 VPS 的記憶體大小來調配,1G RAM VPS 建議設定為 192M,4G RAM VPS 建議設定為 384M。

你也可以使用 Opcache 圖形查看工具監控目前消耗的記憶體,進而判斷是否需要增加這個值。

查看 OPcache 使用的情況,下述工具可以參考使用:

實際 VPS 8G RAM 的例子 (網站數量 20 個):

opcache.max_accelerated_files=4000
opcache.memory_consumption=512

觀察 3 天後 Opcache 命中率不到 70%,腳本文件數量上調到 100000 後,命中率只上升到 80% 左右。

使用監看工具查看 Opcache 後,使用記憶體調整為 1024M 後,命中率才達到理想的 99%。

最終 VPS 8G RAM 的設定:

opcache.max_accelerated_files=100000
opcache.memory_consumption=1024

最後

你的 VPS 有了 Zend Opcache 之後,還需要依照網站數、RAM 去監控命中率而做調整。

一個有效的 Zend Opcache 加速 PHP 設定,才能真正達到伺服器整體的效能,不然一個低命中率的 Zend Opcache 只是浪費你的 VPS 的記憶體而已。


Share your thoughts