部署在香港伺服器上的網站出現載入緩慢,通常可以歸結為兩大原因:CPU 資源不足,或者網路線路品質差。你可以透過一套簡短的診斷步驟,把兩者區分開來。

僅憑表面症狀很容易被誤導。一臺CPU 受限的伺服器回應緩慢、頻繁逾時,訪客往往會把問題怪在自己的網路連線上。線路品質差則表現為封包遺失和重傳,但伺服器本身看起來卻很空閒。

本指南為你提供一條實用路徑:先辨識症狀,再比較這兩種原因,最後按順序做測試。這樣你才能以真實的效能數據為依據,鎖定真正的根因,並對症下藥。

要點速覽

  • 網站載入緩慢往往源於 CPU 資源不足或網路線路品質差。
  • 優先檢查 CPU 和負載,避免後續測試結果被干擾。
  • 從多個地點測試網路延遲和封包遺失率。
  • 根據已確認的根因來實施優化措施,才能真正省錢。
  • 改動之後要再次測試,以確認效能是否真正提升。

CPU 資源不足與網站載入緩慢

當 CPU 跑滿時,回應會變慢,請求會逾時。訪客看到的就是頁面卡住不動,於是以為是網路把資料封包丟了。但實際上伺服器一個封包都沒丟——只是沒有多餘的 CPU 時間來處理請求並回傳回應。

CPU 受限伺服器的典型訊號

可以留意幾個明顯訊號:伺服器整體變得遲緩,大量請求逾時,監控面板中 CPU 長期維持在 100%。The Tech Clouds 指出,無論是應用程式碼、資料庫,還是底層基礎設施,當 CPU 使用率和系統負載長期高於 80%–90% 時,都說明系統已經失衡。當 CPU 一直跑滿時,伺服器在流量高峰期會難以調度各項工作負載,當機與崩潰的風險隨之上升。

CPU 資源不足並不是伺服器端唯一的瓶頸。記憶體不足會迫使作業系統頻繁存取交換分割區,應用程式會明顯變慢,甚至被系統直接終止,Infinitive Host 就提到過這一點。磁碟 I/O 過慢、儲存延遲過高、IOPS 不足,會嚴重拖累資料庫效能。低效的查詢、過多的背景行程以及過於沈重的應用程式都會增加伺服器的整體負載需求。不合理的設定則把這些問題糅合在一起放大。

CPU 使用率低並不代表伺服器端就一定沒有瓶頸。執行緒可能在等待儲存或 socket I/O 時讓 CPU 空轉。某個已記錄的案例中,系統負載高達 22,但 CPU 使用率只有 14%,而 iowait 卻高達 64%——真正的瓶頸在儲存層而不是處理器。

如何確認 CPU 過載

先從行程清單看起。執行 top 或 htop,找出最耗 CPU 的行程;Severalnines 給出的典型示例是 mysqld 常駐行程的 %CPU 達到 87.4%。隨後在資料庫內部透過 show processlist; 檢視目前活動連線,並啟用慢查詢日誌,從應用側捕捉那些成本高昂的 SQL 語句。

微軟的疑難排解指南給出了一個實用的區分方式:如果 % User Time 持續高於 90%,說明主要是資料庫行程本身在消耗 CPU;如果 % Privileged Time 持續高於 90%,則更可能是防毒軟體、驅動程式或其他作業系統元件造成壓力。可以在 60 秒的時間視窗內收集計數器資料,並在 5 秒的間隔上測量 SQL 語句的 CPU 消耗,看看是哪些語句占據了大頭。同時要結合儲存等待時間一起看,因為 iowait 很高往往說明瓶頸在磁碟而非 CPU。

網路線路品質差、封包遺失與重傳

線路側的原因同樣關鍵。高封包遺失率、頻繁的 TCP 重傳、頻寬不足,以及沒有把靜態內容和動態請求分離,都會拖慢網站。路由與線路品質會明顯影響存取速度。阿里雲就描述過一種服務:將中國內地使用者的請求就近路由到香港接入點,再透過一條加速網路存取海外源站。CDN07 則指出,香港節點只有在真正作為接入點、並且到源站有直接路由時才會帶來加速效果。

網路受限伺服器的典型訊號

你會發現網站所有頁面都載入緩慢,而不僅僅是大頁面。頁面載入時間整體變長,使用者會抱怨「網速很慢」,哪怕他們本地的寬頻方案其實很快。用戶端不良的網路連線可以模擬出類似症狀,因此需要對比來自多個地區的回饋。某個伺服器所在區域如果外發頻寬很差,即使上傳測試結果看起來正常,也會導致頁面傳輸緩慢。高延遲、網路壅塞和低頻寬會呈現出不同的表現模式。你需要密切關注封包遺失和重傳、網路連通性問題、封包遺失率以及高峰時段的頻寬限制。將靜態內容與動態請求拆分,往往可以更清晰地暴露出真正的瓶頸。

如何確認網路與延遲問題

按順序執行以下測試:

  1. 先用 ping 來確認問題並測量往返延遲。一般而言,回應時間低於 50ms 都是可接受的。任何程度的封包遺失都不容忽視,即便只有 1%–2%,也足以讓 TCP 退避減速並觸發重傳。
  2. 然後使用 traceroute,找出網路路徑中延遲開始陡增的節點。
  3. 最後使用 MTR 取得最完整的視圖。首先觀察 Loss% 欄;某一跳上的封包遺失率如果持續高於 2%–3%,而且在後續節點依然存在,那就是一個真正的問題點。

再補充做一次吞吐量測試,把實際可用頻寬與業務需求相比對。從多個地點測量延遲和 ping,避免被某一條單獨的壞路由誤導。綜合檢查網路效能、網路延遲和網路頻寬,因為一條線路在表面上看起來「很健康」,但封包遺失率卻可能已經在悄悄攀升。某一跳長期表現出連線不穩定或延遲過長,說明問題出在具體路由節點本身。若 CPU 指標很乾淨但網站依舊緩慢,則可以基本斷定是頻寬瓶頸或線路壅塞導致。

CPU vs 網路:並排對比

這兩類問題在運行特徵、適合的應用場景以及成本影響上都有明顯差異。把它們放在一起對比,有助於你為不同負載選擇正確的優化方案。

效能特徵與應用適配性

CPU 受限的應用大部分時間都在計算。Bytearcher 舉的一個例子很直觀:某項服務要計算 SHA-1 校驗和,核心工作就是對輸入字串反覆做雜湊、位移和 XOR 運算,這種情況下更快的儲存或網路幾乎幫不上忙。網路受限的應用則大部分時間都在等待網路、檔案系統和資料庫的 I/O。典型的 Node.js 網站伺服端就符合這種模式,此時提升磁碟速度或網路效能會有明顯效果。

I/O 受限(網路受限)使用場景CPU 受限使用場景
處理大量小請求的 Web 伺服器(資料庫查詢、API 呼叫)機器學習訓練與推論(大量矩陣運算)
主要負責轉發或拉取其他服務資料的微服務影片轉碼、影像處理、遊戲物理引擎與模擬
以網路或磁碟速度讀入資料的資料收集管道需要在記憶體中完成大規模彙總的分析任務
檔案伺服器、代理伺服器與訊息佇列中介軟體大量依賴加密、雜湊與壓縮的服務

可觀測到的症狀也有助於區分兩者。Datadog 指出,網卡錯誤、封包遺失、CPU 尖峰和頻寬使用率等指標,都可以作為網路設備影響應用效能的證據。ITU Online 則進一步拆分了問題場景:用戶端 CPU 資源不足時,會看到高 CPU、記憶體吃緊、磁碟競爭以及備份或同步工具帶來的背景流量;網路路徑問題則表現為在特定一跳開始出現封包遺失或延遲,該跳在負載高峰時會變得更慢,或者是防火牆因深度檢測而造成間歇性延遲。

成本與最佳適配場景

成本的走向取決於真正的瓶頸在哪一端。CPU 資源不足,會迫使你選擇更大的執行個體、更多的核心,或者投入時間優化程式碼與 SQL 查詢。線路問題則會把你推向更佳的路由、更大的頻寬,或使用 CDN。兩者並不能互相替代:為錯誤的一方加錢,等於把預算直接浪費掉。

根據工作負載選擇匹配的方案。CPU 密集型服務——例如雜湊計算、轉碼、模型推論——最受益於更快的處理器與更強的平行運算能力。請求轉發類微服務、檔案伺服器和資料收集管道,則最需要一條乾淨的網路路徑和充足的頻寬。對於網路受限的網站來說,即便使用高規格 CPU 套餐,只要線路上存在封包遺失和壅塞,頁面仍然會載入緩慢。對於 CPU 受限的服務來說,即使接入了頂級的網路線路,只要每個核心都長期滿負荷,服務照樣會卡頓。先檢查網路延遲和網路連線品質,再考慮是否需要調整伺服器設定;同樣也要先確認 CPU 是否真的是瓶頸,再去談線路升級或更換電信業者。

網卡錯誤、封包遺失、CPU 峰值和頻寬使用率,都可以作為網路設備導致應用效能下降的佐證指標。

逐步診斷網站載入緩慢

按順序執行的測試

請嚴格遵循固定順序來做診斷。首先檢查 CPU 和系統負載,因為一旦處理器已被完全打滿,後續的所有效能測試結果都會被扭曲。在 Windows 上,可以開啟工作管理員,將清單按 CPU 欄從高到低排序,微軟的疑難排解指引中就推薦了這一做法。透過輸入 resmon 開啟資源監視器,可以看到帶有 Average CPU 的檢視。Process Explorer 則提供了執行緒層級的詳細資訊:以系統管理員身分執行,右鍵目標行程,開啟「內容」,進入「執行緒」標籤頁,就能查看最繁忙執行緒的呼叫堆疊。在 Linux 上,可以執行 top 或 vmstat 並關注 wa 指標,根據 Site24x7 的解釋,該值表示 CPU 花在等待 I/O 上的時間比例。

接下來再看網路延遲與封包遺失。Kentik 指出,ping 用於測量兩點之間的往返時間,traceroute 用於記錄每一跳所耗費的時間,而 MTR 則結合了兩者的能力,能為每個路由器同時回報延遲和封包遺失情況。三者組合起來,就可以勾勒出整條路徑上的網路延遲分布。務必從多個地點執行這些測試,而不是只看某一個地方的結果,這樣可以避免單條壞路由誤導你。如果某個城市測試結果很乾淨,而另一個城市封包遺失嚴重,那就說明路由選擇本身存在問題。特別關注那些在某一跳出現但在下一跳消失的封包遺失現象。

之後再測試頻寬。fast 工具可以基於 Netflix 的測試服務回報平均下載速度,而 nethogs 可以按照行程維度統計頻寬使用情況,讓你看清是哪一個程式在消耗線路頻寬。把這些結果與高峰期的真實業務需求對比,而不是僅僅和電信業者的行銷頻寬值對比。如果頻寬測試值偏低而伺服器又很忙,則說明線路已被跑滿;如果頻寬測試很高而頁面仍然很慢,問題就出在別處。記得同時檢查路徑兩端的網路連線情況。

最後再看儲存與資料庫等待。執行 sudo iotop -oP -d 2,只列出目前有 I/O 活動的行程及其 I/O 占比。使用 fio 做隨機 4 KB 讀寫測試,以模擬資料庫存取模式,並關注其回報的 99.00 百分位延遲,該值通常以微秒為單位。這個數值若非常高,就說明真正拖慢頁面載入和整體效能的是磁碟,而不是處理器。

如何解讀測試結果

不要單看某一個指標,而要成對地對比觀察。高 CPU 但網路指標很乾淨,說明更可能是 CPU 資源不足。CPU 很空閒但封包遺失和重傳嚴重,則通常意味著問題出在線路上。Obkio 就記錄過這兩種模式:一種情況是防火牆 CPU 跑到 100%,導致跨兩個電信業者都出現封包遺失,這是本地設備的問題;另一種情況是 CPU 保持穩定,但從第一跳開始就能觀察到封包遺失,這就屬於電信業者層面的故障。整條路徑的連線情況與端點本身同樣重要。

也要警惕「混合訊號」。如果 iowait 很高但 CPU 核心卻空閒,那說明瓶頸是儲存而不是處理器;如果某個城市 ping 值很好而另一個城市封包遺失嚴重,那說明問題出在路由。務必從多個地點測量延遲和 ping 再下結論。僅僅延遲高,有時只是因為物理距離遠,而網路壅塞則會表現為高峰時段延遲不斷攀升。只在高負載情況下才出現的網路延遲,通常是容量上限不足而非線路「損壞」。診斷時要對比路徑兩端的情況,而不是只盯著中間某一段。

在採取行動前,一定要先確認真正的原因。CPU 受限的伺服器需要的是更多核心或更高效的程式碼;網路受限的伺服器需要的是更乾淨的路由或更充足的頻寬。先測試再決策,才能保護預算。網站載入緩慢背後只有一個真正的根因,上面這套按部就班的測試方法正是用來找出它的。搞清楚原因,再匹配對應的優化方案,最後透過複測確認效能的改善幅度。

對於部署在香港伺服器上的網站來說,CPU 資源不足和線路品質差都是非常現實的效能問題根源。單靠表面症狀往往無法分辨哪一種才是主因。忙到極限的處理器和高封包遺失的線路,在使用者體驗上可能表現得幾乎一模一樣。

有序的診斷流程能幫你節省大量時間。先查 CPU 和負載,再測延遲與封包遺失,然後測試頻寬。遵循這個順序可以避免無謂的升級或遷移。跳過測試,往往就意味著把錢花在完全錯誤的地方。

先測試,再行動。先量測你的網路連線,再確認真正的根因,最後為它量身匹配解決方案。為診斷多花一點時間,總比為一次錯誤的升級付出高昂的帳單要划算得多。變更之後也要重新測試,以確認效能收益確實落在實處。

常見問答(FAQ)

如何判斷我的香港伺服器是否 CPU 資源不足?

執行 top 或 htop,觀察系統負載和 CPU 使用率。如果 CPU 使用率長時間維持在 80%–90% 以上,就說明 CPU 資源可能不足。若 wa 值很高但 CPU 核心大多空閒,則說明是儲存 I/O 在等待,而不是處理器本身過載。

網路問題會導致網站變慢,而伺服器監控卻顯示很空閒嗎?

會的。即使 CPU 使用率很低,封包遺失和 TCP 重傳也足以讓頁面載入卡頓。路由品質同樣重要。要從多個地點進行測試,因為單一線路的異常可能會給你帶來誤導。

我應該先做哪項測試?

先檢查 CPU 和系統負載。只要處理器已經被打滿,後面所有的效能指標都會被扭曲。之後再測網路延遲和封包遺失,然後測試頻寬,最後才是儲存等待。這一順序有助於你拿到更乾淨、更可靠的效能數據。

增加頻寬一定能解決網站載入緩慢嗎?

不一定。只有當線路本身已經被跑滿時,增加頻寬才會改善體驗。若伺服器是 CPU 受限,即使你的網路再快,頁面依然會卡頓。務必把優化措施與確認過的根因一一對應,然後透過複測來驗證效能是否真的得到提升。

如何判斷線路上是否存在網路壅塞?

使用 MTR,並關注 Loss% 一欄。若某一跳的封包遺失率持續高於 2%–3%,且在後續節點依然存在,那就是一個真正的問題點。要對比多個地點的測試結果:若有的城市連線很乾淨,有的城市封包遺失嚴重,就說明問題很可能出在路由路徑上。