先分清是誰在吃資源
工作管理員裡用戶端介面和核心是兩個獨立處理程序。介面佔用高,多半是視窗開著在即時刷新連線列表;核心佔用高,才是流量處理層面的問題。
第一步很簡單:關掉主視窗只留系統匣,觀察十分鐘。如果佔用降下來了,那就不是問題,只是介面繪製的開銷。核心閒置時佔用應該很低,持續吃滿一個核心才需要往下查。
依序排查四項
- 1
日誌等級
設定裡如果開著 debug 或 trace,每條連線都要寫日誌,佔用會明顯升高。排查完記得改回 info 或 warning,這是最容易忽略的一項。
- 2
網域偵測
偵測要解析每條連線的交握封包才能還原網域。規則裡大量使用網域比對時它很有用,但開銷不小。不需要就關掉,或只對 443 與 80 連接埠啟用。
- 3
規則集更新頻率
遠端規則集數量多、更新間隔又設得很短時,會週期性地重新下載並編譯規則。把間隔放大到一天一次,對絕大多數用法都夠了。
- 4
連線數
下載工具與 P2P 應用程式會開上千條連線。在連線頁依建立時間排序,看是不是同一個處理程序在持續刷新連線。
記憶體不降是不是異常
核心的記憶體會隨連線數成長,連線關閉後也不會立刻還給系統,這是 Go 執行環境的正常行為,不用緊張。判斷標準是:連線數降下來之後,記憶體是否在幾分鐘內趨於平穩。一直線性上升才算異常,那種情況記下當時的設定與核心版本,先還原一個核心版本比對。
- 一次只改一項,改完觀察十分鐘再動下一項
- TUN 的嚴格路由在部分網路卡上開銷較大,可以關掉比對
- 長期掛著建議關掉自動測速,或把測速間隔放大
常見問題
關掉視窗佔用就正常了,算不算問題?
不算。連線頁會持續接收核心推送的資料,介面繪製本身有開銷。放到系統匣執行就好,這是設計如此。
同樣的設定在另一台電腦上就不高,為什麼?
優先懷疑網路卡驅動與防毒軟體。防毒軟體對虛擬網路卡做深度檢測時,產生的開銷會被算到核心處理程序頭上,看起來就像核心在吃 CPU。