轉自:https://blog.csdn.net/twypx/article/details/80290759 linux
大多數Linux發行版都定義了適當的緩衝區和其餘TCP參數,能夠經過修改這些參數來分配更多的內存,從而改進網絡性能。設置內核參數的方法是經過proc接口,也就是經過讀寫/proc中的值。幸運的是,sysctl能夠讀取/etc/sysctl.conf中的值並根據須要填充/proc,這樣就可以更輕鬆地管理這些參數。服務器
下面展現了在互聯網服務器上應用於Internet服務器的一些比較激進的網絡設置。cookie
# 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
當從客戶機發來新的TCP鏈接時,數據包設置了SYN位,服務器就位這個半開的鏈接建立一個條目,並用一個SYN-ACK數據包進行響應。在正常操做中,遠程客戶機用一個ACK數據包進行響應,這回使得半開的鏈接轉換爲全開的。性能
有一種稱爲SYN氾濫(SYN flood)的網絡攻擊,它使ACK數據包沒法返回,致使服務器用光內存空間,沒法處理到來的鏈接。SYN cookie特性能夠識別出這種狀況,並使用一種優雅的方法保留隊列中的空間,大多數系統都默認啓用這個特性,可是確保配置這個特性更可靠。.net
第二個設置啓用TCP窗口伸縮blog
啓用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 = 256960net.core.rmem_max = 256960net.core.wmem_default = 256960net.core.wmem_max = 256960net.ipv4.tcp_timestamps = 0net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1