標籤:
原文: http://cenwj.com/2015/2/25/19
本文參考文章為:
最佳化Linux下的核心TCP參數來提高伺服器負載能力
Linux Tuning
本文所面對的情況為:
- 高並發數
- 高延遲高丟包(典型的美國伺服器)
值得注意的是,因為openvz的VPS許可權比較低,能夠修改的地方比較少,所以使用openvz的VPS作VPN伺服器是非常不推薦的。
我們通過修改 /etc/sysctl.conf 來達到調整的目的,注意修改完以後記得使用:
來使修改生效。
首先,針對高並發數,我們需要提高一些linux的預設限制:
net.ipv4.tcp_syncookies = 1 |
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉; |
net.ipv4.tcp_tw_reuse = 1 |
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP串連,預設為0,表示關閉; |
net.ipv4.tcp_tw_recycle = 0 |
#表示開啟TCP串連中TIME-WAIT sockets的快速回收,預設為0,表示關閉; |
net.ipv4.tcp_fin_timeout = 30 |
net.ipv4.tcp_keepalive_time = 1200 |
#表示當keepalive起用的時候,TCP發送keepalive訊息的頻度。預設是2小時,改為20分鐘。 |
net.ipv4.ip_local_port_range = 10000 65000 #表示用於向外串連的連接埠範圍。預設情況下很小:32768到61000,改為10000到65000。(注意:這裡不要將最低值設的太低,否則可能會佔用掉正常的連接埠!) |
net.ipv4.tcp_max_syn_backlog = 8192 |
#表示SYN隊列的長度,預設為1024,加大隊列長度為8192,可以容納更多等待串連的網路連接數。 |
net.ipv4.tcp_max_tw_buckets = 5000 |
#表示系統同時保持TIME_WAIT的最大數量,如果超過這個數字,TIME_WAIT將立刻被清除並列印警告資訊。 |
#額外的,對於核心版本新於**3.7.1**的,我們可以開啟tcp_fastopen: |
net.ipv4.tcp_fastopen = 3 |
其次,針對大流量高丟包高延遲的情況,我們通過增大緩衝來提高TCP效能,自己看E文注釋吧……感覺我翻譯出來各種味道不對 = =:
# increase TCP max buffer size settable using setsockopt() |
net.core.rmem_max = 67108864 |
net.core.wmem_max = 67108864 |
# increase Linux autotuning TCP buffer limit |
net.ipv4.tcp_rmem = 4096 87380 67108864 |
net.ipv4.tcp_wmem = 4096 65536 67108864 |
# increase the length of the processor input queue |
net.core.netdev_max_backlog = 250000 |
# recommended for hosts with jumbo frames enabled |
net.ipv4.tcp_mtu_probing=1 |
這裡面涉及到一個TCP擁塞演算法的問題,你可以用下面的命令查看本機提供的擁塞演算法控制模組:
sysctl net.ipv4.tcp_available_congestion_control |
如果沒有下文提到的htcp,hybla演算法,你可以嘗試通過modprobe啟用模組:
對於幾種演算法的分析,詳情可以參考下:TCP擁塞控制演算法 優缺點 適用環境 效能分析,但是這裡面沒有涉及到專門為衛星通訊設計的擁塞控制演算法:Hybla。根據各位大神的實驗,我們發現Hybla演算法恰好是最適合美國伺服器的TCP擁塞演算法,而對於日本伺服器,個人想當然的認為htcp演算法應該可以比預設的cubic演算法達到更好的效果。但是因為htcp演算法恰好沒有編入我們所使用的VPS中,所以沒辦法測試。
net.ipv4.tcp_congestion_control=hybla
|
[轉載] 高流量大並發Linux TCP 效能調優