Linux 核心網路堆疊透過 /proc/sys/net/ 暴露數百個可調參數。正確調整可大幅提升高併發、高延遲、高頻寬環境下的傳輸效能。本文整理最關鍵參數、建議值、持久化方法與完整參數表參考。
| 參數路徑 | 說明 | 建議值 | 備註 |
|---|---|---|---|
/proc/sys/net/core/rmem_max | 最大 TCP 接收緩衝區 (位元組) | 256960 (256 KB) | 配合 BDP (Bandwidth-Delay Product) 設定 |
/proc/sys/net/core/wmem_max | 最大 TCP 發送緩衝區 | 256960 | 同上 |
/proc/sys/net/core/rmem_default | 預設 TCP 接收緩衝區 | 256960 | |
/proc/sys/net/core/wmem_default | 預設 TCP 發送緩衝區 | 256960 | |
/proc/sys/net/ipv4/tcp_window_scaling | 啟用 TCP 視窗縮放 (RFC 1323) | 1 (開啟) | **必開**,支援 >64KB 視窗,高延遲鏈路關鍵 |
/proc/sys/net/ipv4/tcp_sack | 啟用選擇性確認 (SACK) | 1 (開啟) | 減少重傳,提升丟包環境效能 |
/proc/sys/net/ipv4/tcp_timestamps | 啟用時間戳選項 (RFC 1323) | 0 (關閉) | 每封包增 12 bytes 開銷;高併發可關閉換取頻寬,但失去 PAWS/RTT 測量 |
/proc/sys/net/ipv4/tcp_rmem | TCP 接收緩衝區自動調整 (min, default, max) | 4096 87380 6291456 | 核心自動調節範圍,max 應 ≥ rmem_max |
/proc/sys/net/ipv4/tcp_wmem | TCP 發送緩衝區自動調整 | 4096 65536 6291456 | 同上 |
/proc/sys/net/ipv4/tcp_max_syn_backlog | SYN 佇列最大長度 | 8192 或更高 | 防禦 SYN Flood、高併發連線 |
/proc/sys/net/ipv4/tcp_syncookies | 啟用 SYN Cookies | 1 | SYN 佇列滿時啟用,防禦 SYN Flood |
/proc/sys/net/ipv4/tcp_fin_timeout | TIME_WAIT 超時秒數 | 30 (預設 60) | 加速連線釋放,高併發短連線環境建議降低 |
/proc/sys/net/ipv4/tcp_tw_reuse | 允許 TIME_WAIT 連線重用於新連出連線 | 1 | 需 tcp_timestamps=1 配合,謹慎啟用 |
/proc/sys/net/ipv4/tcp_tw_recycle | 快速回收 TIME_WAIT (已棄用/移除) | 0 | **Linux 4.12+ 已移除**,勿使用 |
/proc/sys/net/core/somaxconn | 監聽佇列最大長度 (listen backlog) | 65535 | Nginx/Redis 等高併發服務需同步調大 |
/proc/sys/net/core/netdev_max_backlog | 網卡接收封包佇列長度 | 30000 | 突發流量緩衝 |
在 /etc/rc.d/rc.local (或 /etc/rc.local) 加入 echo 值 > /proc/路徑,並確保檔案有執行權限 (chmod +x)。
echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 65535 > /proc/sys/net/core/somaxconn
編輯 /etc/sysctl.conf (或 /etc/sysctl.d/99-tcp-tuning.conf):
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 30000
套用:sysctl -p 或 sysctl --system (systemd 會開機自動套用)。
最佳緩衝區大小 ≈ 頻寬 (bits/sec) × 往返延遲 (sec) / 8。
| 參數 | 說明 | 預設值 |
|---|---|---|
/proc/sys/fs/file-max | 系統全域檔案控制代碼上限 | 依記憶體動態 (通常 >100k) |
/proc/sys/fs/nr_open | 單一進程最大開啟檔案數上限 | 1048576 |
/proc/sys/kernel/pid_max | 最大 PID 數值 (影響最大進程數) | 32768 (64-bit 可設至 4194303) |
/proc/sys/kernel/threads-max | 系統最大執行緒數 | 依記憶體動態 |
/proc/sys/vm/swappiness | Swap 激進度 (0-100) | 60 (伺服器建議 10-30) |
/proc/sys/vm/overcommit_memory | 記憶體超額配置策略 (0/1/2) | 0 (啟發式) |
sysctl -a | grep tcp 檢視所有 TCP 參數目前值。ss -s / netstat -s 觀察 TCP 重傳、連線建立失敗、緩衝區溢位等計數器。iperf3、netperf 進行基準測試,量化調優效果。警告:
/proc下修改屬臨時,**重開機失效**。務必透過sysctl.conf或rc.local持久化。調整前請完整備份、於測試環境驗證,生產環境漸進式調整。