伺服器搬遷,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 的核心是最佳路徑演算法,運算速度通常卡在兩個地方:
- CPU 多執行緒是否正常開啟運作。
- 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