天天看點

linux網絡接口資料重新封包,linux 系統調優參數

3. 關于核心參數的優化,在/etc/sysctl.conf檔案内

1)timewait的數量,預設是180000。(Deven:是以如果想把timewait降下了就要把tcp_max_tw_buckets值減小)

net.ipv4.tcp_max_tw_buckets = 6000

2)允許系統打開的端口範圍。

net.ipv4.ip_local_port_range = 1024 65000

3)啟用TIME-WAIT狀态sockets快速回收功能;用于快速減少在TIME-WAIT狀态TCP連接配接數。1表示啟用;0表示關閉。但是要特别留意的是:這個選項一般不推薦啟用,因為在NAT(Network Address Translation)網絡下,會導緻大量的TCP連接配接建立錯誤,進而引起網站通路故障。

net.ipv4.tcp_tw_recycle = 0

實際上,net.ipv4.tcp_tw_recycle功能的開啟,要需要net.ipv4.tcp_timestamps(一般系統預設是開啟這個功能的)這個開關開啟後才有效果;

當tcp_tw_recycle 開啟時(tcp_timestamps 同時開啟,快速回收 socket 的效果達到),對于位于NAT裝置後面的 Client來說,是一場災難!

會導緻到NAT裝置後面的Client連接配接Server不穩定(有的 Client 能連接配接 server,有的 Client 不能連接配接 server)。

也就是說,tcp_tw_recycle這個功能,是為内部網絡(網絡環境自己可控 ” ——不存在NAT 的情況)設計的,對于公網環境下,不宜使用。

通常來說,回收TIME_WAIT狀态的socket是因為“無法主動連接配接遠端”,因為無可用的端口,而不應該是要回收記憶體(沒有必要)。

即:需求是Client的需求,Server會有“端口不夠用”的問題嗎?

除非是前端機,需要大量的連接配接後端服務,也就是充當着Client的角色。

正确的解決這個總是辦法應該是:

net.ipv4.ip_local_port_range = 9000 6553 #預設值範圍較小

net.ipv4.tcp_max_tw_buckets = 10000 #預設值較小,還可适當調小

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 10

4)開啟重用功能,允許将TIME-WAIT狀态的sockets重新用于新的TCP連接配接。這個功能啟用是安全的,一般不要去改動!

net.ipv4.tcp_tw_reuse = 1

5)開啟SYN Cookies,當出現SYN等待隊列溢出時,啟用cookies來處理。

net.ipv4.tcp_syncookies = 1

6)web應用中listen函數的backlog預設會給我們核心參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG預設為511,是以有必要調整這個值。

net.core.somaxconn = 262144

7)每個網絡接口接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。

net.core.netdev_max_backlog = 262144

8)系統中最多有多少個TCP套接字不被關聯到任何一個使用者檔案句柄上。如果超過這個數字,孤兒連接配接将即刻被複位并列印出警告資訊。這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了記憶體之後)。

net.ipv4.tcp_max_orphans = 262144

9)記錄的那些尚未收到用戶端确認資訊的連接配接請求的最大值。對于有128M記憶體的系統而言,預設值是1024,小記憶體的系統則是128。

net.ipv4.tcp_max_syn_backlog = 262144

10)時間戳可以避免序列号的卷繞。一個1Gbps的鍊路肯定會遇到以前用過的序列号。時間戳能夠讓核心接受這種“異常”的資料包。

net.ipv4.tcp_timestamps = 1

11)cp_synack_retries顯示或設定 Linux 核心在回應 SYN 要求時會嘗試多少次重新發送初始 SYN,ACK 封包後才決定放棄。這是所謂的三段交握 (threeway handshake) 的第二個步驟。即是說系統會嘗試多少次去建立由遠端啟始的 TCP 連線。tcp_synack_retries 的值必須為正整數,并不能超過 255。因為每一次重新發送封包都會耗費約 30 至 40 秒去等待才決定嘗試下一次重新發送或決定放棄。tcp_synack_retries 的預設值為 5,即每一個連線要在約 180 秒 (3 分鐘) 後才确定逾時

net.ipv4.tcp_synack_retries = 5

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

net.ipv4.tcp_syn_retries = 5

13)如果套接字由本端要求關閉,這個參數 決定了它保持在FIN-WAIT-2狀态的時間。對端可以出錯并永遠不關閉連接配接,甚至意外當機。預設值是60秒。2.2 核心的通常值是180秒,你可以按這個設定,但要記住的是,即使你的機器是一個輕載的WEB伺服器,也有因為大量的死套接字而記憶體溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因為它最多隻能吃掉1.5K記憶體,但是它們的生存期長些。

net.ipv4.tcp_fin_timeout = 30

14)用執行個體進行說明以下三個參數:

如果某個TCP連接配接在idle 2個小時後,核心才發起probe(探查).如果probe 9次(每次75秒既tcp_keepalive_intvl值)不成功,核心才徹底放棄,認為該連接配接已失效。

net.ipv4.tcp_keepalive_time = 7200

net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_keepalive_intvl = 75