Linux TCP/IP 協議棧調優__Linux

來源:互聯網
上載者:User

本文轉載至:http://colobu.com/2014/09/18/linux-tcpip-tuning

最近忙於系統效能的DEBUG和調優。 有些效能瓶頸和Linux的TCP/IP的協議棧的設定有關,所以特別google了一下Linux TCP/IP的協議棧的參數意義和配置,記錄一下。
如果想永久的儲存參數的設定, 可以將參數加入到/etc/sysctl.conf中。如果想臨時的更改參數的配置, 可以修改/proc/sys/net/ipv4/下的參數, 機器重啟後更改失效。

楊雲1028整理的參數的說明:
參考文章:
linux核心TCP相關參數解釋
http://os.chinaunix.net/a2008/0918/985/000000985483.shtml

linux核心參數最佳化
http://blog.chinaunix.net/uid-29081804-id-3830203.html linux核心參數注釋

根據參數檔案所處目錄不同而進行分表整理
下列檔案所在目錄:/proc/sys/net/ipv4/

名稱

預設值

建議值

描述

tcpsyn_retries

5

1

對於一個建立串連,核心要發送多少個 SYN 串連請求才決定放棄。不應該大於255,預設值是5,對應於180秒左右時間。。(對於大負載而物理通訊良好的網路而言,這個值偏高,可修改為2.這個值僅僅是針對對外的串連,對進來的串連,是由tcp_retries1決定的)

tcp_synack_retries

5

1

對於遠端的串連請求SYN,核心會發送SYN + ACK資料報,以確認收到上一個 SYN串連請求包。這是所謂的三向交握( threeway handshake)機制的第二個步驟。這裡決定核心在放棄串連之前所送出的 SYN+ACK 數目。不應該大於255,預設值是5,對應於180秒左右時間。

tcp_keepalive_time

7200

600

TCP發送keepalive探測訊息的間隔時間(秒),用於確認TCP串連是否有效。

防止兩邊建立串連但不發送資料的攻擊。

tcp_keepalive_probes

9

3

TCP發送keepalive探測訊息的間隔時間(秒),用於確認TCP串連是否有效。

tcp_keepalive_intvl

75

15

探測訊息未獲得響應時,重發該訊息的間隔時間(秒)。預設值為75秒。 (對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)

tcp_retries1

3

3

放棄回應一個TCP串連請求前﹐需要進行多少次重試。RFC 規定最低的數值是3

tcp_retries2

15

5

在丟棄啟用(已建立通訊狀況)的TCP串連之前﹐需要進行多少次重試。預設值為15,根據RTO的值來決定,相當於13-30分鐘(RFC1122規定,必須大於100秒).(這個值根據目前的網路設定,可以適當地改小,我的網路內修改為了5)

tcp_orphan_retries

7

3

在近端丟棄TCP串連之前﹐要進行多少次重試。預設值是7個﹐相當於 50秒 - 16分鐘﹐視 RTO 而定。如果您的系統是負載很大的web伺服器﹐那麼也許需要降低該值﹐這類 sockets 可能會耗費大量的資源。另外參的考tcp_max_orphans。(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網路環境中降低該值為3)

tcp_fin_timeout

60

2

對於本端斷開的socket串連,TCP保持在FIN-WAIT-2狀態的時間。對方可能會中斷連線或一直不結束串連或不可預料的進程死亡。預設值為 60 秒。

tcp_max_tw_buckets

180000

36000

系統在同時所處理的最大 timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除並且顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐不過﹐如果網路條件需要比預設值更多﹐則可以提高它(或許還要增加記憶體)。(事實上做NAT的時候最好可以適當地增加該值)

tcp_tw_recycle

0

1

開啟快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議開啟它)

tcp_tw_reuse

0

1

表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP串連(這個對快速重啟動某些服務,而啟動後提示連接埠已經被使用的情形非常有協助)

tcp_max_orphans

8192

32768

系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那麼不屬於任何進程的串連會被立即reset,並同時顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制。如果記憶體大更應該增加這個值。(這個值Redhat AS版本中設定為32768,但是很多防火牆修改的時候,建議該值修改為2000)

tcp_abort_on_overflow

0

0

當守護進程太忙而不能接受新的串連,就象對方發送reset訊息,預設值是false。這意味著當溢出的原因是因為一個偶然的猝發,那麼串連將恢複狀態。只有在你確信守護進程真的不能完成串連請求時才開啟該選項,該選項會影響客戶的使用。(對待已經滿載的sendmail,apache這類服務的時候,這個可以很快讓用戶端終止串連,可以給予服務程式處理已有串連的緩衝機會,所以很多防火牆上推薦開啟它)

tcp_syncookies

0

1

只有在核心編譯時間選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是為了防止syn flood攻擊。

tcp_stdurg

0

0

使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 開啟它﹐或會導致不能和它們正確溝通。

tcp_max_syn_backlog

1024

16384

對於那些依然還未獲得用戶端確認的串連請求﹐需要儲存在隊列中最大數目。對於超過 128Mb 記憶體的系統﹐預設值是 1024 ﹐低於 128Mb 的則為 128。如果伺服器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大於 1024﹐最好修改include/net/tcp.h裡面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻擊利用TCP協議散布握手的缺陷,偽造虛假源IP地址發送大量TCP-SYN半開啟串連到目標系統,最終導致目標系統Socket隊列資源耗盡而無法接受新的串連。為了應付這種攻擊,現代Unix系統中普遍採用多串連隊列處理的方式來緩衝(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全串連應用(Connect()和Accept() ),是用另一個隊列單獨存放半開啟串連。這種雙隊列處理方式和其他一些系統核心措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效緩解小規模的SYN Flood攻擊(事實證明)

tcp_window_scaling

1

1

該檔案表示設定tcp/ip會話的滑動視窗大小是否可變。參數值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的視窗最大可達到 65535 位元組,對於高速網路,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動視窗大小增大數個數量級,從而提高資料轉送的能力(RFC 1323)。(對普通地百M網路而言,關閉會降低開銷,所以如果不是高速網路,可以考慮設定為0)

tcp_timestamps

1

1

Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條1G的寬頻線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 ‘舊封包‘。(該檔案表示是否啟用以一種比逾時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的效能應該啟用這個選項。)

tcp_sack

1

1

使用 Selective ACK﹐它可以用來尋找特定的遺失的資料報—- 因此有助於快速恢複狀態。該檔案表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓寄件者只發送丟失的報文段)。(對於廣域網路通訊來說這個選項應該啟用,但是這會增加對 CPU 的佔用。)

tcp_fack

1

1

開啟FACK擁塞避免和快速重傳功能。(注意,當tcp_sack設定為0的時候,這個值即使設定為1也無效)[這個是TCP串連靠譜的核心功能]

tcp_dsack

1

1

允許TCP發送“兩個完全相同“的SACK。

tcp_ecn

0

0

TCP的直接擁塞通告功能。

tcp_reordering

3

6

TCP流中重排序的資料報最大數量。 (一般有看到推薦把這個數值略微調整大一些,比如5)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.