January 15Jan 15 ----------- 前言 ----------- 本文旨在透過啟用Google BBR擁塞控制演算法,搭配一系列核心網路參數調校,最大化伺服器的網路傳輸效率與連線處理能力 適合以下使用情境: 高延遲、高封包遺失率的網路環境 (如跨國傳輸、衛星網路) VPS、雲端主機、CDN節點、遊戲伺服器 高併發連線的Web服務、反向代理、資料庫主從同步 雲端平台注意:AWS、GCP、Azure 等雲端平台可能已預設啟用BBR或使用自訂的擁塞控制演算法。建議先確認現有設定,再決定是否覆蓋 ----------------- 什麼是BBR? ----------------- BBR (Bottleneck Bandwidth and Round-trip propagation time) 是由Google開發的TCP擁塞控制演算法,首次併入Linux 核心 4.9版 (2016年) 相較於傳統的 CUBIC 演算法,BBR的核心差異在於:CUBIC以「封包遺失」作為壅塞信號被動反應,BBR則主動探測「可用頻寬」與「最小 RTT」 因此在封包遺失率較高或延遲較大的環境下,仍能維持相對穩定的吞吐量 適合啟用BBR的場景: 跨國或跨洲的遠距離連線 高延遲網路 (如衛星連線、行動網路回程) VPS伺服器對外提供服務 需要大量資料傳輸的應用 (備份、影音串流、大型檔案傳輸) 補充說明:BBR 對「上行頻寬受限」的場景效益最為明顯。若你的伺服器主要作為靜態網站或僅有少量連線,BBR帶來的提升幅度可能不那麼顯著,但開啟也無害 雖然Debian 13的核心版本已原生支援BBR,但我們仍需確認環境 uname -r 應返回 6.12.88+deb13-cloud-amd64 核心版本需 ≥ 4.9 才支援 BBR。Debian 13預設核心通常為 6.1.x 或更高,完全符合需求 ----------------------------------- 確認目前使用的擁塞控制演算法 ----------------------------------- 在進行任何變更前,先記錄現有設定以利未來對比或復原 sysctl net.ipv4.tcp_congestion_control sysctl net.core.default_qdisc ------------------------------------------- 建立 啟用BBR設定檔 + 網路優化設定檔 ------------------------------------------- 建議在 /etc/sysctl.d/ 目錄下建立 獨立設定檔,而非直接修改 /etc/sysctl.conf。好處是: 模組化管理,易於維護或回滾 系統升級時不易被覆蓋 數字前綴 99 確保此設定在所有同目錄設定檔中最後載入,優先級最高建立vi /etc/sysctl.d/99-network-optimization.conf99-network-optimization.conf.txt貼上以下內容儲存檔案並離開vi編輯器按 Esc,輸入 :wq,按 Enter------------------ 套用設定 ------------------ 即時套用 sysctl -p /etc/sysctl.d/99-network-optimization.conf 若無任何錯誤輸出,表示設定已成功套用 若看到類似 No such file or directory 或 Invalid argument,請檢查對應參數名稱是否有拼寫錯誤 注意:tcp_tw_recycle 在 Linux 4.12 後已從核心移除 若你的核心版本為 4.12 以上 (Debian 13 完全符合) 套用時可能出現 sysctl: setting key "net.ipv4.tcp_tw_recycle": No such file or directory 的警告 此為正常現象,該行可直接從設定檔刪除或註解掉 --------------- 永久生效 --------------- 設定檔放置於 /etc/sysctl.d/ 目錄下,系統重啟後會自動載入,無需額外操作 若想手動重新套用全部 sysctl 設定 (例如測試時): sysctl --system --------------------- 重開機,再次驗證 --------------------- 重開機 reboot 確認擁塞控制演算法 sysctl net.ipv4.tcp_congestion_control 預期輸出 net.ipv4.tcp_congestion_control = bbr 查看系統支援的演算法清單 sysctl net.ipv4.tcp_available_congestion_control 輸出中應包含 bbr,例如:net.ipv4.tcp_available_congestion_control = reno cubic bbr 確認佇列規則 sysctl net.core.default_qdisc 預期輸出 net.core.default_qdisc = fq ------------------------------ 確認即時連線是否套用BBR ------------------------------ 確認目前TCP連線是否真正套用BBR,可觀察即時封包 ss -ti | grep bbr 結果說明: 有輸出:顯示正在使用BBR的連線資訊,表示BBR正常運作 無輸出:目前沒有活動的TCP連線,或連線數極少。這是正常的,不代表設定失敗 測試建議:可以產生一些網路流量 (如下載檔案) 後再次執行此指令 ----------------------- 驗證其他網路參數 ----------------------- sysctl net.core.somaxconn sysctl net.ipv4.ip_local_port_range sysctl net.ipv4.tcp_rmem sysctl net.ipv4.tcp_wmem --------------- 常見問題 --------------- Q:套用時出現 No such file or directory 錯誤 A:最常見原因是核心版本過新,移除了某些舊參數 (如 tcp_tw_recycle)。找到對應行並加上 # 註解即可 查詢哪些核心參數實際存在 sysctl -a 2>/dev/null | grep tcp_tw Q:重開機後設定消失 A:確認設定檔位於 /etc/sysctl.d/ 且副檔名為 .conf: ls -la /etc/sysctl.d/99-network-optimization.conf Q:Docker 或 Kubernetes 環境下 BBR 沒有效果 A:容器網路 (CNI 如 Flannel、Calico) 可能有自己的 qdisc 或網路命名空間,sysctl 設定未必能透傳進容器 建議在容器的 securityContext 中允許 NET_ADMIN,或於 Pod 啟動時以 Init Container 套用設定 Q:如何回滾所有設定? A:刪除設定檔後重新套用即可: rm /etc/sysctl.d/99-network-optimization.conf sysctl --system ---------------------------- 針對特殊場景的調校建議 ---------------------------- 高延遲衛星網路 將 keepalive 閒置時間調高,避免正常使用中的連線被誤判為斷線: net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_keepalive_intvl = 60 極高併發短連線 (如 HTTP API 服務) 縮短 FIN 等待時間並搭配更大的埠範圍,加速連線資源回收: net.ipv4.tcp_fin_timeout = 15 net.ipv4.ip_local_port_range = 1024 65535 同時確認應用程式層 (如 Nginx) 的 worker_connections 和 backlog 設定也一併調高 ---------------- 優化效益總結 ---------------- 傳輸效率:BBR + fq --> 提升吞吐量,降低延遲 緩衝區:rmem / wmem --> 支援大流量、高延遲傳輸 連線容量:somaxconn / backlog --> 提升高併發接受能力 資源回收:fin_timeout / tw_reuse --> 加速連線關閉與埠號釋放 連線偵測:keepalive系列 --> 及早清除殭屍連線 可靠性:SACK / timestamps --> 改善封包遺失後的重傳效率 ---------------- 注意事項 ---------------- 核心升級後:升級 Linux 核心後,建議重新執行驗證步驟,確認BBR仍為預設演算法 NAT環境:若此伺服器位於 NAT 之後 (如家用路由器後方),tcp_tw_reuse 可能造成連線混淆,建議設為 0 應用層設定需同步:somaxconn 僅是核心層上限,應用程式 (Nginx、Node.js 等) 本身的 backlog 設定也必須對應調高,否則效果有限 不要在生產環境直接大幅改動:建議先在測試環境驗證,確認效能改善或無副作用後,再部署至生產機器 監控:調整後建議使用 iperf3、nload、sar 等工具監控實際效果,數據說話 Edited 22 hours ago22 hr by Jack
Create an account or sign in to comment