Linux性能調優方法總結(一)

網絡性能調優

大多數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
發佈了45 篇原創文章 · 獲贊 69 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章