轉自:https://blog.csdn.net/twypx/article/details/80290759
大多數Linux發行版都定義了適當的緩沖區和其他TCP參數,可以通過修改這些參數來分配更多的內存,從而改進網絡性能。設置內核參數的方法是通過proc接口,也就是通過讀寫/proc中的值。幸運的是,sysctl可以讀取/etc/sysctl.conf中的值並根據需要填充/proc,這樣就能夠更輕松地管理這些參數。
下面展示了在互聯網服務器上應用於Internet服務器的一些比較激進的網絡設置。
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65535 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000
將這些設置添加到/etc/sysctl.conf的現有內容中。
第一個設置啟用TCP SYN cookie。
當從客戶機發來新的TCP連接時,數據包設置了SYN位,服務器就位這個半開的連接創建一個條目,並用一個SYN-ACK數據包進行響應。在正常操作中,遠程客戶機用一個ACK數據包進行響應,這回使得半開的連接轉換為全開的。
有一種稱為SYN泛濫(SYN flood)的網絡攻擊,它使ACK數據包無法返回,導致服務器用光內存空間,無法處理到來的連接。SYN cookie特性可以識別出這種情況,並使用一種優雅的方法保留隊列中的空間,大多數系統都默認啟用這個特性,但是確保配置這個特性更可靠。
第二個設置啟用TCP窗口伸縮
啟用TCP窗口伸縮可以使客戶機能夠以更高的速度下載數據。TCP允許在未從遠程端收到確認的情況下發送多個數據包,默認設置是最多64KB,在與延遲比較大的遠程客戶機進行通信時這個設置可能不夠,窗口伸縮會在頭中啟用更多的位,從而增加窗口大小。
后面四個配置項增加TCP發送和接收緩沖區
這使應用程序可以更快地丟掉它的數據,從而為另一個請求服務,還可以強化遠程客戶機在服務器繁忙時發送數據的能力。
最后一個配置項增加可用的本地端口數量
這樣就增加了可以同時服務的最大連接數量。
在下一次引導系統時,或者下一次運行sysctl -p /etc/sysctl.conf時,這些設置就會生效。
TCP/IP子系統的調優
所有的TCP/IP調優參數都位於/proc/sys/net目錄,例如下面是最重要的一些調優參數:
# 最大的TCP數據接收緩沖
/proc/sys/net/core/rmem_max
# 最大的TCP數據發送緩沖
/proc/sys/net/core/wmem_max
# 時間戳在TCP的包頭增加12個字節
/proc/sys/net/ipv4/tcp_timestamps
# 有選擇的應答
/proc/sys/net/ipv4/tcp_sack
# 支持更大的TCP窗口,如果TCP窗口最大超過65535,必須設置該數值為1
/proc/sys/net/ipv4/tcp_window_scaling
# 默認的接收窗口大小
rmem_default
# 接收窗口的最大大小
rmem_max
# 默認的發送窗口大小
wmem_default
# 發送窗口的最大大小
wmem_max
/proc目錄下的所有內容都是臨時性的,所以重啟系統后任務修改都會丟失
建議在系統啟動時自動修改TCP/IP參數,將下面代碼增加到/etc/rc.local文件中,然后保存文件,系統重新引導的時候回自動修改下面TCP/IP參數:
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
TCP/IP參數都是自解釋的,TCP窗口大小設置為256960,禁止TCP的時間戳(取消在每個數據包的頭中增加12字節),支持更大的TCP窗口和TCP有選擇的應答。
上面數值的設定是根據互聯網連接和最大帶寬/延遲率來決定的。
另外一個方法:使用/etc/sysctl.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