sean.
Back to notes

伺服器搬遷,THP 踩雷 =-=

接下了一個讓人期待又害怕的任務:負責將公司所有服務搬遷至新伺服器。原本以為只是單純的環境轉移,沒想到剛搬完測試,Direction API Service 的效能整整降低了 30% !!!

Created

Mar 20, 2026

01

發生了什麼事情?

接下了一個讓人期待又害怕的任務:負責將公司所有服務搬遷至新伺服器。原本以為只是單純的環境轉移,沒想到剛搬完測試,Direction API Service 的效能整整降低了 30% !!!

天崩開局 !!! QAQ,身為工程師的直覺告訴我,一定有什麼神祕力量在干擾!

02

問題範圍縮減

我秉持著「絕對相信隊友」的良善想法(?),認定這一定是 OS Config 在搞鬼!(ノ°Д°)ノ。
為了定位問題,我迅速執行了幾項基本測試。

懷疑對象 測試結果 結論
硬體規格 新 Server 的 CPU 與 Memory 設備都更強 排除(硬體更猛)
網絡延遲 內網 Request Benchmark 依然慢了 30% 排除(非網路問題)
程式邏輯 同一套 Binary 環境 排除(Code 一致)
03

定位兇手:記憶體吞吐量

Direction Service 的核心是最佳路徑演算法,運算速度通常卡在兩個地方:

  1. CPU 多執行緒是否正常開啟運作。
  2. Memory 讀取圖資的速度(Graph Data Loading)。

我在 Service 的關鍵節點埋下 Logger 進行時間戳分析,發現:

主要耗時卡在「圖資讀取並建立 Graph」的階段!

兇手範圍被鎖定在 「記憶體讀取效率」。在硬體更強的前提下,讀取速度反而變慢,極有可能是 Linux OS 本身的分頁設置導致讀取次數過於頻繁。

04

解決方案:啟動 THP (Transparent Huge Pages)

經過與 AI 的一番調研與討論,我發現了一個關鍵設置:THP (Transparent Huge Pages)

  • 問題點: 當 THP 未開啟時,系統使用標準的 4KB 分頁。對於需要載入大量圖資的服務,這會導致大量的頁表查詢(Page Table Walks)與快取失效(TLB Miss)。
  • 奇蹟時刻: 開啟 THP 後,服務可以一次讀取較大的記憶體區塊(通常為 2MB),大幅減少了讀取次數。
05

執行結果

開啟 THP 後,奇蹟發生了!效能不僅回到了原本的水準,最終效能比舊環境還提升了 20% !!

06

經驗總結

縮小可能的錯誤範圍,理解服務本身在做什麼,在主要邏輯運行的地方設置多個 Logger 精準定位 bottleneck ,同樣的程式在不同作業系統設置下(尤其是記憶體密集型服務)表現天差地遠 。

Continue reading