如何解決WordPress網站CPU佔用率過高問題

如何解決WordPress網站CPU佔用率過高問題

關於 WordPress 網站 CPU 佔用率過高甚至爆表這個問題(尤其是使用寶塔面板的),實在太常見了。不少站長忍無可忍,都找我們專門為他們專門排查和處理這個問題。

的確,CPU 使用率過高會給一切帶來麻煩 – 從載入緩慢的頁面到你意想不到的後臺錯誤。最棘手的是什麼?沒有放之四海而皆準的原因。可能是臃腫的外掛、過時的程式碼,甚至是自動流量在不知不覺中對伺服器造成的衝擊。

在你開始更換主題或升級效能更強勁的伺服器之前,將佔用伺服器資源的原因歸零是很有幫助的。本教學指南分析了 WordPress CPU 佔用率過高的常見罪魁禍首,並提出了讓網站重回正軌的明確方法。

什麼原因導致WordPress CPU佔用率過高?

1. 惡意軟體或殭屍流量

像惡意軟體和自動殭屍流量這樣的幕後威脅是 WordPress 網站開始出現 CPU 佔用率超標的常見原因。惡意軟體經常會潛入並啟動後臺程序,悄無聲息地消耗伺服器的電能。與此同時,機器人可能會透過重複請求或暴力登入嘗試來攻擊您的網站–這些都不會增加價值,但都會佔用您的資源。

應對這種壓力的最佳方法之一就是在惡意軟體有機會拖慢您的速度或危及您的資料之前,及早捕獲並清除惡意軟體。

2. 外掛過多或效率低下

有些外掛比表面看起來更重。當你擁有多個活動外掛,尤其是功能重疊或執行後臺任務的外掛時,伺服器就會不堪重負。即使是一個最佳化不佳的外掛,也足以導致 CPU 使用率飆升。

3. 帶有不必要功能的重型主題

有些 WordPress 主題包含各種華而不實的元素–滑塊、動畫、視差效果–這些元素會讓網站看起來華而不實,但也會快速消耗 CPU 資源。主題中包含的功能越多,伺服器載入和顯示這些功能的難度就越大。選擇輕量級的主題通常意味著更快的載入時間和更好的整體效能。

4. 臃腫或未最佳化的資料庫

隨著時間的推移,你的資料庫會悄悄地填滿許多垃圾–老版本、垃圾帖子、垃圾評論、你停止使用的外掛的殘留物。如果不定期清理,額外的重量會降低網站響應請求的速度。雜物越多,CPU 在提取資料時承受的壓力就越大。

5. 快取問題或根本沒有快取

如果快取設定不當,或者根本沒有使用快取,那麼伺服器最終會為每個訪客一遍又一遍地重建相同的頁面。這在流量較小的情況下沒有問題,但當更多的人訪問你的網站時,很快就會出現問題。一些託管平臺可以幫助您解決這個問題。

例如,部分專業的 WordPress 伺服器提供商就包含多個快取層,如 VarnishMemcached Redis。它們在幕後工作,減少伺服器的工作量,保持網站快速執行。

6. 後臺任務持續執行

WordPress 使用 wp-cron 來處理釋出文章或傳送電子郵件等計劃任務。但是,如果這些任務執行得過於頻繁,或者惡意程式碼侵入了您的 cron 作業,就會迅速佔用伺服器資源。

為了控制局面,最好從伺服器端管理 cron 作業,而不是依賴 WordPress 的內建系統。

7. 過時的軟體

舊版本的 WordPress 核心、主題或外掛可能效率低下且容易受到攻擊。它們更有可能相互衝突,錯過效能改進,或為增加負載的安全威脅敞開大門。

8. 主機設定薄弱

有時,問題並不在於你的網站,而在於網站背後的伺服器。共享主機計劃通常對 CPU 能力有嚴格限制,一旦你的網站開始吸引更多訪客或執行更多程序,速度就會迅速減慢。

9. 過大的媒體檔案

上傳大容量的圖片檔案或未壓縮的影片會增加 CPU 佔用率,因為伺服器需要處理這些檔案並將其傳送給每位訪客。如果不進行適當最佳化,媒體檔案就會成為瓶頸。

我們已經詳細介紹了如何增加 WordPress 中的最大上傳檔案大小,你一定要看看。

10. 高流量卻沒有足夠的資源

流量突然激增對業務來說是件好事,但如果你的託管環境不具備處理流量的能力,那就不是好事了。缺乏可擴充套件的資源會將CPU的使用率推向極致,從而導致速度變慢或崩潰。

如何修復WordPress CPU使用率過高的問題?

有幾個因素會將伺服器的 CPU 推向極限,從而影響網站的速度和可靠性。讓我們來看看最常見的原因及其對效能的影響。

1. 使用具有最佳化CPU資源的虛擬主機

共享主機環境通常帶有資源上限,限制了網站在負載情況下的效能。這包括固定的 CPU 分配、記憶體限制和 PHP Worker 限制,這些都會在流量激增時對動態網站造成瓶頸。

另一方面,更好的主機設定會給你提供更多的工作空間。你需要根據網站的執行情況靈活調整 PHP Worker,還需要能減少重複伺服器端處理的快取層。全頁面快取、物件快取和操作碼快取等功能有助於更快、更高效地提供內容,從而減輕 CPU 的壓力。

當然更有靈活性方式,讓您不用被固定的 PHP Worker 限制所束縛 – 您可以根據網站處理負載的方式對其進行調整。比如 Varnish 和 Redis 等快取選項,幫助您的網站更快、更可靠地提供頁面。

2. 刪除佔用大量資源的外掛

刪除佔用大量資源的外掛

有些外掛會悄悄執行後臺任務,嚴重增加網站的 CPU 負載。這些任務通常涉及即時資料收集或持續掃描,如即時流量跟蹤、斷鏈檢查或錯誤記錄。

不過,並不是一看到重型外掛就得刪除。有些外掛還是有用的,你只需注意它們的配置方式。關閉持續的後臺掃描或限制它們的執行頻率,有助於減少伺服器壓力,同時又不會失去你所依賴的功能。

查詢監控器等工具可以幫助你確定哪些外掛佔用了資源。啟用後,檢視“Queries by Component”部分。如果某個外掛很突出,看看是否可以不用它,或者至少換一個更高效的替代品。

我們有一份關於如何使用 Query Monitor 除錯 WordPress 效能問題的指南,你可能會覺得有用。

您還可以檢視 WP Hive Chrome 擴充套件。它可以直接從 WordPress 外掛庫中顯示每個外掛對記憶體使用和效能的影響。如果您的資料庫因剩餘外掛表或舊日誌而變得雜亂無章,WP-Optimize 可以幫您清理。有時,即使只是減少活動外掛模組的數量,也會帶來很大的不同。

3. 啟用全頁面快取

全頁面快取可以減少伺服器從頭開始建立頁面的頻率,從而大幅降低 CPU 佔用率。您的網站無需在每次訪問時都處理 PHP 和資料庫查詢,而是提供靜態 HTML 版本的頁面,從而保持快速、輕量。

這並不總是需要手動設定。現在,許多託管主機平臺都可以透過內建工具或伺服器級配置為您處理全頁面快取。

又或者使用 Object Cache,可處理更復雜的快取需求,尤其適用於資料庫龐大的網站。

如果你想更進一步,還可以使用 Redis,只需點選幾下即可從伺服器設定中啟用。

你還可以使用 CDN,它可以提供邊緣級快取,幫助你提高網站的首位元組時間(TTFB)。這意味著快取內容將從離您的訪問者最近的伺服器傳送,從而加快載入時間,同時減輕原始伺服器的負荷。

4. 停用WP-Cron並執行外部Cron作業

WordPress 有一個內建的 cron 系統,即 WP-Cron,它可以處理釋出計劃文章、傳送電子郵件提醒或檢查外掛更新等任務。問題出在哪裡?每次有人載入網站頁面時,它都會執行。

在繁忙的網站上,這種持續觸發會開始拖累效能。與其讓 WP-Cron 在每次頁面載入時都執行,你可以改用外部 cron 作業,它在伺服器級別按照一致的計劃執行。這樣就可以避免將常規後臺任務與訪客流量掛鉤。

大多數主機服務提供商都提供了獨立於 WordPress 安排這些工作的方法。

5. 阻止惡意爬蟲和惡意流量

並非所有訪問 WordPress 網站的流量都來自真實使用者。其中很大一部分是機器人–有些有用,有些則不太有用。雖然搜尋引擎機器人(如 Googlebot)對於搜尋引擎最佳化至關重要,但現在有越來越多的自動爬蟲,它們不會帶來任何價值,而且會透過不斷 ping 您的頁面來減慢您的網站速度。

為了保持高效執行,過濾掉垃圾爬蟲很有幫助。您可以從使用 robots.txt 檔案阻止不受歡迎的機器人開始。以下是基本語法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
User-agent: NameOfBot
Disallow: /
User-agent: NameOfBot Disallow: /
User-agent: NameOfBot
Disallow: /

要限制只訪問特定目錄,結構略有不同:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
User-agent: BotName
Disallow: /folder-name/
User-agent: BotName Disallow: /folder-name/
User-agent: BotName
Disallow: /folder-name/

要檢查網站的 robots.txt 檔案,請在瀏覽器位址列中輸入您的域名,然後輸入 /robots.txt。

robots.txt 檔案

有些爬蟲會完全忽略這些指令。在這種情況下,最好使用 .htaccess 檔案在伺服器級別阻止它們。以下規則禁止訪問特定的使用者代理:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BotName [NC]
RewriteRule .* - [F,L]
To block multiple bots in one go, list them together:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(BotOne|BotTwo|BotThree).*$ [NC]
RewriteRule .* - [F,L]
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^BotName [NC] RewriteRule .* - [F,L] To block multiple bots in one go, list them together: RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^.*(BotOne|BotTwo|BotThree).*$ [NC] RewriteRule .* - [F,L]
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BotName [NC]
RewriteRule .* - [F,L]
To block multiple bots in one go, list them together:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(BotOne|BotTwo|BotThree).*$ [NC]
RewriteRule .* - [F,L]

下面是一個伺服器的 .htaccess 檔案示例,僅供參考:

.htaccess 檔案示例

如果這聽起來有點太專業,或者你不想繼續手動追蹤殭屍,那麼有一些外掛可以幫你處理。有些外掛會監控爬蟲與網站的互動方式,當殭屍符合已知的濫用模式時,就會自動阻止訪問。

另外,您還可以安裝使用 Spider Analyser 外掛,該外掛提供蜘蛛日誌統計、蜘蛛訪問路徑,蜘蛛爬取文章,蜘蛛攔截等一系列的功能。透過該外掛將你不需要的蜘蛛、爬蟲拒之門外,比起前面幾種辦法可能更加直觀和易於操作。

6. 最佳化和清理資料庫

如果您的 WordPress 網站的 CPU 使用率持續飆升,您的資料庫可能是問題的一部分。隨著時間的推移,垃圾資料會堆積起來,比如外掛中遺留的條目、從未清除的臨時記錄以及不再需要的舊草稿。

特別是 WooCommerce 網站,它們會堆積臨時資料,如購物車會話和產品快取,這些資料只能在短時間內發揮作用,然後就閒置在那裡。可以清除這些過期條目,以減輕一些後臺壓力。

舊外掛是另一個罪魁禍首。即使你停用或刪除了它們,它們也往往會留下不斷被查詢的表格或條目。

WP-Optimize Advanced Database Cleaner 這樣的外掛可以幫助你掃描遺留資料並安全地清除它們。

如果您安裝了我們的 WPTurbo 外掛,您可以在外掛內建的資料庫最佳化功能模組,一鍵執行諸如修訂歷史版本、草稿、垃圾評論、回收站、過期瞬態、所有瞬態清理和資料表最佳化等任務。

進入資料庫管理器,選擇看起來臃腫的表格(如wp_options、wp_postmeta或wp_comments),然後使用最佳化功能對其進行整理。

資料庫最佳化

7. 升級到最新的PHP版本

升級到最新的PHP版本可以大大提高網站速度,減少伺服器資源的使用。PHP 8.3與舊版本相比,效能更快,效率更高。

無論是使用寶塔面本還是現在的大部分雲伺服器,升級或降級 PHP 版本非常簡單,您可以直接從平臺上進行升級或降級,不會有任何麻煩。

升級到最新的PHP版本

以上只是解決 WordPress 網站 CPU 使用率高的幾種方法。可能還有其他因素在起作用,導致CPU使用率飆升,追查確切原因有時就像一場猜謎遊戲。如果你無從下手,更明智的解決方案是找專業的人做專業的事情,比如我們所提供的 WordPress 技術服務

小結

降低 CPU 使用率對於提高 WordPress 網站的效能、正常執行時間和整體健康水平至關重要。雖然本篇文章中分享的技巧可以幫助降低 CPU 負載,但往往需要反覆試驗才能找出確切原因。

評論留言