一台虛擬主機跑 10 個 WordPress,PHP-FPM OPcache 設太小會發生什麼事?

在一台虛擬主機(VPS)上同時架設 10 個 WordPress 網站並不少見。只要 CPU、RAM、硬碟與 PHP-FPM 的設定合理,一台 VPS 完全可以同時服務多個網站。

不過,有一個很容易被忽略的設定,就是 PHP OPcache 的 opcache.memory_consumption

如果 VPS 上有很多 WordPress 網站,而 OPcache 分配的記憶體太少,就可能導致 OPcache 不斷將舊的 PHP 程式碼清除,再重新編譯與快取。網站不一定會直接「掛掉」,但 PHP 執行效率可能下降,甚至造成 CPU 使用量增加、網站回應時間變長。

本文就來說明,當一台 VPS 上跑 10 個 WordPress,而 PHP-FPM 的 OPcache 太小時,實際上可能會發生什麼事情。

一、OPcache 是做什麼的?

WordPress 本身是以 PHP 撰寫,而 PHP 程式在執行時,需要先將 PHP 原始碼解析、編譯成可以執行的 opcode。

如果沒有 OPcache,PHP 每次處理請求時,都可能需要重新進行這些工作。

啟用 OPcache 後,PHP 可以將編譯完成的 opcode 放在共享記憶體中。

簡單來說:

沒有 OPcache:

WordPress PHP
     ↓
讀取 PHP 檔案
     ↓
解析 PHP
     ↓
編譯 opcode
     ↓
執行

有 OPcache:

WordPress PHP
     ↓
OPcache 已經有快取?
     ↓
   有 → 直接使用 opcode
   ↓
   執行

因此,OPcache 可以減少 PHP 重複解析與編譯程式碼的成本。

對 WordPress 這類由大量 PHP 檔案組成的網站來說,OPcache 通常相當重要。


二、OPcache 設太小會發生什麼?

這是最重要的部分。

如果 OPcache 的記憶體不足,可能會看到以下情況。

1. OPcache 不斷被塞滿

例如:

opcache.memory_consumption=128

而 10 個 WordPress 加起來需要更多的 OPcache 空間。

當 OPcache 接近滿載時,新的 PHP 程式碼仍然可能需要被加入快取。

這時候就可能出現快取淘汰(eviction)或重新快取的情況。

PHP 程式碼可能因為空間不足而被移出 OPcache:

WordPress A
WordPress B
WordPress C
...
WordPress J
        ↓
OPcache 空間不足
        ↓
部分 PHP opcode 被淘汰
        ↓
下一次請求重新編譯

這樣就會增加 PHP 的工作量。

因此可能出現:

CPU 使用量增加
        ↓
PHP 執行時間增加
        ↓
網站回應速度下降

2.可能看到 CPU 使用率變高

假設 VPS 原本:

CPU:20~30%

當 OPcache 空間不足,而且網站有大量 PHP 請求時,可能變成:

CPU:40~60%

甚至更高。

原因不是 WordPress 突然多做了什麼,而是 PHP 需要更頻繁地進行:

讀取 PHP
→ 解析
→ 編譯
→ 執行

而不是直接:

OPcache
→ 執行

如果 VPS 上同時有 10 個網站,這種情況可能被放大。


三、讓 Opcache-dashboard 來幫你

https://github.com/qcybb/opcache-dashboard-php8

Hits 通常會在 98-99%在右

Memory 如爆了要去加 opcache.memory_consumption

Keys 不足也要去加。opcache.max_accelerated_files

PHP-FPM OPcache 設太小會發生什麼事

四、結論

一台 VPS 同時運行 10 個 WordPress 時,如果 PHP-FPM 共用的 OPcache 太小,最主要的問題通常不是「網站立刻掛掉」,而是:

OPcache 空間不足
        ↓
部分 PHP opcode 被淘汰
        ↓
Cache Miss 增加
        ↓
PHP 需要重新解析、編譯
        ↓
CPU 工作量增加
        ↓
PHP 回應時間可能增加
        ↓
網站效能下降

最後也要記住:

OPcache 不是越大越好,而是要大到足以讓常用的 PHP 程式碼穩定留在快取中,同時保留足夠 RAM 給 PHP-FPM、資料庫、Redis、Nginx 與作業系統。

延伸閱讀

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。