~/blog/cloudways-advanced-performance-tuning-monitoring-cron-guide.md
網站效能與架構優化 · 2025 / 09 / 22

Cloudways 速度還不夠?別只會點按鈕!解鎖監控、應用與排程的進階調校術

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
Cloudways 速度還不夠?別只會點按鈕!解鎖監控、應用與排程的進階調校術
目錄 table-of-contents.md

Cloudways 的一鍵啟用 Varnish、Redis、Nginx 確實能讓網站速度瞬間起飛,但時間一久卻常常「又變慢了」。問題的根源不是按鈕按得不夠多,而是缺少對數據的判讀與應用層的同步調校。本文的結論很直接:真正讓 Cloudways 跑得又快又穩的關鍵,是學會三件事——讀懂監控圖表來診斷瓶頸、讓 WordPress 確實使用伺服器上的快取、以及用系統 Cron Job 取代效能不可靠的 WP-Cron。

很多朋友用了 Cloudways 之後,都覺得那介面真是太香了,點幾下按鈕,Varnish、Redis、Nginx 這些酷東西就全上了。但過了一陣子,你可能會發現:「咦?怎麼好像又變慢了?」或「尖峰時段網站怎麼有點卡卡的?」這時候如果只是回後台把按鈕再按一次,基本上是沒用的。主機管理不是一勞永逸的魔法,它更像照顧一盆植物,需要持續觀察、理解需求、做出調整。Cloudways 提供了絕佳的工具,但工具本身不會思考。以下我們就超越漂亮的 UI,深入「按鈕背後」的 Cloudways 主機最佳化技巧,教你從「點擊工程師」進化成真正懂主機的「系統調校師」。

本文重點一次看

  • 診斷先於調校:把 CPU、RAM、磁碟 I/O 的監控圖表當成主機的心電圖,看「模式」而不只看「高低」。
  • 應用層要同步:在伺服器啟用 Redis 只是第一步,WordPress 端必須透過外掛橋接,並驗證真的有命中快取。
  • 排程要可靠:關閉 WP-Cron,改用 Cloudways 的系統 Cron Job,讓排程不再依賴訪客流量觸發。

你的監控圖表在說話,你聽懂了嗎?

在 Cloudways 的 Server Management 介面裡,有個叫「Monitoring」的頁籤。大多數人只是偶爾瞄一眼,看到綠色的線就覺得天下太平。但魔鬼藏在曲線的細節裡。學會判讀圖表是所有進階優化的第一步,因為你得先學會「診斷」,才能「開藥」。

CPU 使用率:重點是「模式」,不只是「高低」

Cloudways 的 CPU Idle 圖表是反向指標,線越低代表 CPU 越忙。比起單純看 CPU 有沒有飆高,更關鍵的是觀察它的「模式」:

  • 規律性的尖峰(Spikes):如果每天在固定時間(例如凌晨三點)出現尖峰後又降下來,通常是排程任務造成的,像備份或數據處理。這是正常的;但若尖峰太高或持續太久,就表示排程任務可能需要優化。
  • 持續性的高檔(Sustained High Usage):如果 CPU 長時間維持高檔、網站卻沒什麼流量,這是大警訊。可能意味程式碼有 bug(例如無限迴圈)、被惡意機器人攻擊,或某個外掛正在背景瘋狂消耗資源。
  • 越來越密的毛刺:頻繁、短暫的小尖峰通常對應使用者訪問;但若毛刺越來越密、越來越高,代表處理每個請求的成本正在增加,可能是資料庫查詢變慢或頁面越來越複雜。

RAM 記憶體:快取的樂園還是 OOM Killer 的地獄?

Cloudways 幫你裝了 Redis 或 Memcached 這類 Object Cache 工具,它們會把常用的資料庫查詢結果放在 RAM 裡,大幅提升速度。但 RAM 是有限的,所以你要特別關注「Free Memory」。

可用記憶體一直很低、甚至趨近於零,不見得是壞事,這可能代表快取機制運作良好、充分利用了記憶體。但如果同時開始遇到 502 Bad Gateway 或網站間歇性無法連線,就要小心了。這很可能是 Linux 的 OOM(Out Of Memory)Killer 啟動——當記憶體耗盡時,系統會「殺掉」它認為最耗資源的進程(例如 PHP-FPM 或 MySQL)來釋放空間,導致網站瞬間掛掉。

判斷的訣竅在於「同時看兩條線」:Free Memory 低又伴隨服務中斷,才是真問題;只是低但網站穩定,多半是快取在做工。

磁碟 I/O 與空間:被遺忘的效能殺手

大家常忽略磁碟,但它是個隱形瓶頸。你需要關注兩個指標:

  • Disk Usage(磁碟空間):很直觀就是硬碟用量。但很多人沒注意到 Cloudways 的備份是存在本機的,如果備份頻率太高、保留份數太多,很快就會把空間吃光。空間不足會導致資料庫無法寫入、圖片無法上傳,甚至直接癱瘓。
  • Reads/Writes Per Second(每秒讀寫):反映磁碟繁忙程度。如果訪客不多但 I/O 卻很高,通常指向資料庫問題。例如一個沒有加索引(Index)的查詢,可能讓 MySQL 在硬碟上做大量「全表掃描」,使磁碟 I/O 飆高、拖慢整個網站。

診斷小結:CPU 看模式、RAM 看是否伴隨服務中斷、磁碟看空間與每秒讀寫。三者交叉比對,往往就能把問題收斂到「程式碼/外掛」、「快取設定」或「資料庫查詢」其中之一。

應用程式層級的協同作戰:讓 WordPress 與 Cloudways 完美同步

光看伺服器數據還不夠,你必須讓 WordPress 知道「我們現在有 Varnish 和 Redis 了,要好好利用它們」。這就是應用程式層級的調校。

Redis 物件快取:不只是安裝外掛那麼簡單

在 Cloudways 後台啟用 Redis 只是第一步,它只代表「伺服器上安裝了 Redis 服務」,你的 WordPress 根本還不知道它的存在。你必須透過外掛當作橋樑:

  1. 安裝外掛:我個人推薦 Redis Object Cache 這個外掛,安裝並啟用。
  2. 設定連接:啟用後,到「設定」>「Redis」,點擊「Enable Object Cache」。它通常能自動抓到 Cloudways 的設定。
  3. 驗證是否成功:這一步最重要,也是很多人的盲區。你可以透過 SSH 連到主機,輸入 redis-cli monitor,再去瀏覽網站前台。如果終端機看到一堆指令在跳動,恭喜你,WordPress 正在跟 Redis 熱線;如果一片死寂,表示連接沒成功,快回去檢查設定。

為什麼非驗證不可?因為 Object Cache 很容易「外掛顯示已啟用、實際卻沒命中」。常見原因包括連線埠或 socket 路徑沒對上、權限問題,或外掛雖然存活但回退到了預設的資料庫快取。redis-cli monitor 直接觀察的是 Redis 服務本身收到的請求,所以它是最不會騙人的證據。

Varnish 的愛恨情仇:如何優雅地清除快取

Varnish 是頁面快取神器,但也是一把雙面刃。最常見的問題就是「我明明在後台更新了文章,前台看到的卻還是舊的」,這是因為 Varnish 的快取沒被清除。

Cloudways 預設安裝的 Breeze 外掛能處理大部分情況:當你儲存文章時,它會自動告訴 Varnish「這頁更新了,快吐掉舊的快取」。但如果你是透過程式碼或其他外掛更新內容(例如 WooCommerce 的庫存變動),Breeze 可能不知道,這時就需要手動或透過程式碼觸發清除。原則很簡單:凡是會改變前台顯示內容的關鍵操作流程,都要確保有對應的快取清除機制,才不會讓使用者看到過時資訊。

快取分層的心智模型

把這兩個快取分層理解,調校就清楚多了:

  • Varnish 是「頁面快取」:快取整個 HTML 輸出,命中時請求根本碰不到 PHP,最快但最容易顯示舊內容,所以「清除策略」是重點。
  • Redis Object Cache 是「物件快取」:快取的是 WordPress 內部的資料庫查詢與運算結果,請求仍會進到 PHP,但省下重複的資料庫往返。對後台操作與動態頁面的幫助特別明顯。

兩者互補:Varnish 擋掉大量匿名訪客的重複請求,Redis 加速那些無法被頁面快取的動態場景。

告別 WP-Cron 拖油瓶:設定真正的系統排程

這是經典的 WordPress 效能議題,但在 Cloudways 上解決起來特別簡單,不做實在可惜。

為什麼 WP-Cron 是個效能災難?

WordPress 預設的排程機制(WP-Cron)很特別,它不是像真正的排程那樣定時執行,而是「當有訪客來到網站時,順便檢查一下有沒有過期的排程任務要執行」。這會造成兩個問題:

  1. 高流量網站:每次載入頁面都要多做一次檢查,增加伺服器不必要的負擔。
  2. 低流量網站:如果半夜都沒人來,排定在半夜的備份任務就永遠不會執行,直到隔天第一個訪客進來才觸發,完全失去排程的意義。

兩步驟,徹底解放你的網站

在 Cloudways 上,我們可以輕鬆用真正的系統 Cron Job 取代 WP-Cron。

第一步:關閉 WordPress 預設的 WP-Cron

用 FTP 或 SSH 編輯網站根目錄下的 wp-config.php,在 /* That's all, stop editing! Happy publishing. */ 這一行之前,加入以下程式碼:

define('DISABLE_WP_CRON', true);

這行程式碼告訴 WordPress:「別再自己雞婆檢查排程了,我會從外部搞定。」

第二步:在 Cloudways 設定系統 Cron Job

登入 Cloudways 後台,進入 Application Management,找到「Cron Job Management」頁籤,點擊「Add New Cron Job」:

  • Schedule:設定執行頻率,我通常會設每 5 或 15 分鐘一次。
  • Command:在命令欄位選擇「PHP」,並貼上以下路徑:/home/master/applications/你的應用程式名稱/public_html/wp-cron.php

這樣就完成了。從此你的 WordPress 排程會由伺服器穩定、有效率地在背景執行,不再拖慢任何一位訪客的載入速度。

頻率該設多密?

沒有絕對答案,原則是「頻率要追得上你最頻繁的排程任務」。如果你有每分鐘需要處理的工作(例如即時性較高的佇列),就得設得更密;若多半是備份、清理這類低頻任務,每 15 分鐘通常綽綽有餘。設得太密反而會在沒任務時白白喚醒 PHP 進程,徒增負擔——這也呼應前面提到的「凌晨規律尖峰」,多半就是排程在動工。

總結:從「點擊工程師」到「系統調校師」

Cloudways 主機最佳化技巧的精髓,不在於知道要去哪裡點按鈕,而在於理解按鈕背後的運作原理,並學會透過數據做決策。今天的三個重點:

  • 讀懂監控數據:把圖表當成主機的「心電圖」,學會從中診斷潛在問題。
  • 同步應用程式:確保 WordPress 知道如何善用伺服器提供的快取工具,並實際驗證有命中。
  • 優化核心機制:用真正的系統排程取代 WP-Cron,從根本上解決效能瓶頸。

掌握這些,你就不再只是 Cloudways 的「使用者」,而是能駕馭它的「管理者」。當然,效能優化博大精深,這只是冰山一角。如果你在調校過程中遇到更棘手的問題,或希望有專業團隊為你的網站架構進行深度健檢與優化,歡迎隨時找我們聊聊。

浪花科技專注於提供企業級的 WordPress 解決方案,從高效能主機架構到客製化開發,我們都有豐富的實戰經驗。別讓網站效能成為業務成長的絆腳石,立即聯繫我們,讓我們的資深工程師團隊為你打造一個既快又穩的網站!

延伸閱讀

// FAQ

常見問題

Cloudways 已啟用 Redis,為什麼 WordPress 還是沒有變快?
在 Cloudways 後台啟用 Redis 只代表伺服器上安裝了 Redis 服務,WordPress 本身並不知道它的存在。必須額外安裝 Redis Object Cache 之類的外掛當作橋樑,在設定中點擊 Enable Object Cache,才能讓 WordPress 真正使用 Redis 快取。
如何確認 WordPress 的 Redis 物件快取真的有生效?
可透過 SSH 連到主機執行 redis-cli monitor,然後瀏覽網站前台。若終端機看到大量指令跳動,表示 WordPress 正在與 Redis 溝通;若一片死寂,代表連接沒成功,常見原因是連線埠或 socket 路徑不對、權限問題,或外掛回退到了預設的資料庫快取。
為什麼建議在 Cloudways 上停用 WP-Cron 改用系統 Cron Job?
WP-Cron 不是定時執行,而是依賴訪客造訪時順便檢查過期任務。高流量網站每次載入頁面都多做一次檢查、增加負擔;低流量網站則可能因半夜無人造訪而導致排程任務遲遲不執行。改用系統 Cron Job 後排程才會真正定時觸發。做法是在 wp-config.php 加入 define('DISABLE_WP_CRON', true);,再到 Cloudways 的 Cron Job Management 新增排程呼叫 wp-cron.php。
Cloudways 主機的可用記憶體很低,是不是出問題了?
可用記憶體偏低不一定是壞事,可能代表快取機制充分利用了記憶體。判斷訣竅是同時觀察兩條線:若 Free Memory 低又伴隨 502 Bad Gateway 或網站間歇性中斷,很可能是 Linux 的 OOM Killer 殺掉了 PHP-FPM 或 MySQL 進程,才是真問題;若記憶體低但網站穩定,多半是快取在正常運作。
Varnish 頁面快取和 Redis 物件快取有什麼差別?
Varnish 是頁面快取,快取整個 HTML 輸出,命中時請求完全不會碰到 PHP,速度最快但最容易顯示舊內容,因此清除策略是重點。Redis 物件快取則是快取 WordPress 內部的資料庫查詢與運算結果,請求仍會進到 PHP,但省下重複的資料庫往返,對後台操作與動態頁面幫助明顯。兩者互補使用效果最佳。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?