tcp_tw_reuse、tcp_tw_recycle 使用場景及注意事項
linux TIME_WAIT 相關引數:
net.ipv4.tcp_tw_reuse = 0 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉 net.ipv4.tcp_tw_recycle = 0 表示開啟TCP連線中TIME-WAIT sockets的快速回收,預設為0,表示關閉 net.ipv4.tcp_fin_timeout = 60 表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間(可改為30,一般來說FIN-WAIT-2的連線也極少)
注意:
- 不像Windows 可以修改登錄檔修改2MSL 的值,linux 是沒有辦法修改MSL的,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2狀態。
- tcp_tw_reuse 和SO_REUSEADDR 是兩個完全不同的東西。
1. tw_reuse,tw_recycle 必須在客戶端和服務端timestamps 開啟時才管用(預設開啟)
2. tw_reuse 只對客戶端起作用,開啟後客戶端在1s內回收
3. tw_recycle 對客戶端和伺服器同時起作用,開啟後在 3.5*RTO 內回收,RTO 200ms~ 120s 具體時間視網路狀況。
內網狀況比tw_reuse 稍快,公網尤其行動網路大多要比tw_reuse 慢,優點就是能夠回收服務端的TIME_WAIT數量
對於客戶端
1. 作為客戶端因為有埠65535問題,TIME_OUT過多直接影響處理能力,開啟tw_reuse 即可解決,不建議同時開啟tw_recycle,幫助不大。
2. tw_reuse 幫助客戶端1s完成連接回收,基本可實現單機6w/s請求,需要再高就增加IP數量吧。
3. 如果內網壓測場景,且客戶端不需要接收連線,同時tw_recycle 會有一點點好處。
4. 業務上也可以設計由服務端主動關閉連線
對於服務端
1. 開啟tw_reuse無效
2. 線上環境 tw_recycle 不要開啟
伺服器處於NAT 負載後,或者客戶端處於NAT後(這是一定的事情,基本公司家庭網路都走NAT);
公網服務開啟就可能造成部分連線失敗,內網的話倒是可以視情況開啟;
像我所在公司對外服務都放在NAT負載後面,負載會把timestamp 都給清空,好吧,就算你開啟也不起作用。
3. 伺服器TIME_WAIT 高怎麼辦
不像客戶端有埠限制,處理大量TIME_WAIT Linux已經優化很好了,每個處於TIME_WAIT 狀態下連線記憶體消耗很少,
而且也能通過tcp_max_tw_buckets = 262144 配置最大上限,現代機器一般也不缺這點記憶體。
下面像我們一臺每秒峰值1w請求的http 短連線服務,長期處於tw_buckets 溢位狀態,
tw_socket_TCP 佔用70M, 因為業務簡單服務佔用CPU 200% 執行很穩定。
slabtop
262230 251461 95% 0.25K 17482 15 69928K tw_sock_TCP
ss -s Total: 259 (kernel 494) TCP: 262419 (estab 113, closed 262143, orphaned 156, synrecv 0, timewait 262143/0), ports 80 Transport Total IP IPv6 * 494 - - RAW 1 1 0 UDP 0 0 0 TCP 276 276 0 INET 277 277 0 FRAG 0 0 0
唯一不爽的就是:
系統日誌中overflow 錯誤一直在刷屏,也許該把buckets 調大一下了
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
5. 業務上也可以設計由客戶端主動關閉連線
原理分析
1. MSL 由來
發起連線關閉方回覆最後一個fin 的ack,為避免對方ack 收不到、重發的或還在中間路由上的fin 把新連線給幹掉了,等個2MSL,4min。
也就是連線有誰關閉的那一方有time_wait問題,被關那方無此問題。
2. reuse、recycle
通過timestamp的遞增性來區分是否新連線,新連線的timestamp更大,那麼小的timestamp的fin 就不會fin掉新連線。
3. reuse
通過timestamp 遞增性,客戶端、伺服器能夠處理outofbind fin包
4. recycle
對於服務端,同一個src ip,可能會是NAT後很多機器,這些機器timestamp遞增性無可保證,伺服器會拒絕非遞增請求連線。
細節之處還得好好閱讀tcp 協議棧原始碼了
建議閱讀以下參考:
相關推薦
tcp_tw_reuse、tcp_tw_recycle 使用場景及注意事項
linux TIME_WAIT 相關引數: net.ipv4.tcp_tw_reuse = 0 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉 net.ipv4.tcp_tw_recycle = 0 表示開啟T
ORACLE分割槽表梳理系列(一)- 分割槽表概述、分類、使用方法及注意事項
前言 本文著重闡述分割槽表的概念、優勢,以及常用分割槽表的使用方法及使用過程中的注意事項。 對於分割槽表的日常維護方法,如:索引的維護、分割槽的合併等,將在後續文章中再詳細介紹。 本文涉及的相應演示,使用的資料庫版本為oracle 11.2.0.4。 本文常用分割槽表的使
布隆過濾器的原理、使用場景和注意事項
今天碰到個業務,他的 Redis 叢集有個大 Value 用途是作為布隆過濾器,但溝通的時候被小懟了一下,意思大概是 “布隆過濾器原理都不懂,還要我優化?”。技術菜被人懟認了、怪不得別人,自己之前確實只是聽說過這個,但是沒深入瞭解過,趁這個機會補充一下知識。 在進入正文之前,之前看到
sql查詢語句的書寫順序、執行順序及注意事項(優化策略)
查詢中用到的關鍵詞主要由6個,分別是:select、from、where、group by、having、order by書寫順序:順序與上一行一致。不過其中select和from為必須,其他關鍵詞是可選執行順序:from、where、group by、having、sele
JSON的使用場景及注意事項介紹
上篇我們講解了JSON的誕生原因是因為XML整合到HTML中各個瀏覽器實現的細節不盡相同,所以道格拉斯·克羅克福特(Douglas Crockford) 和 奇普·莫寧斯達(Chip Morningstar)一起從JS的資料型別中提取了一個子集,作為新的資料交換格式,因為主流的瀏覽器使用了通用的JavaScr
深入瞭解typeof與instanceof的使用場景及注意事項
JavaScript中的資料型別分為兩類,**undefined,number,boolean,string,symbol,bigint,null[^1]組成的基礎型別**和**Object、Function、Array等型別組成的引用型別**。 ![在這裡插入圖片描述](https://img2020.c
重灌系統後,重新安裝ORACLE加環境變數配置、客戶端PL/SQL的安裝過程,及注意事項(避免再次踩坑)
(1)首先了解什麼是OERACLE及Oracle與PL/SQL是什麼關係: ORACLE是資料庫,有客戶端和伺服器; PLSQL Developer只是第三方工具,服務於ORACLE,類似的工具還有Toad,sqlplus,sql developer等等; 安裝PLSQL Developer
分享知識-快樂自己:Struts2(動態方法、動態結果、萬用字元、方法內部跳轉、action跳轉、OGNL 的使用及注意事項)
這裡主要以案例演示:涵蓋以下知識點 1、動態方法呼叫:使用關鍵 符號 ! 進行操作 例如:/名稱空間 ! 方法名 2、動態結果集:就是說,通過後臺返回的結果 ${} 獲取,重定向到符合預期的頁面。 3、萬能萬用字元:*_* :第一個 * 為 類名、第二個 * 為方
實戰Java高併發程式設計(四、鎖的優化及注意事項)
在多核時代,使用多執行緒可以明顯地提升系統的效能。但事實上,使用多執行緒會額外增加系統的開銷。對於單任務或單執行緒的應用來說,其主要資源消耗在任務本身。對於多執行緒來說,系統除了處理功能需求外,還需要維護多執行緒環境特有的資訊,如執行緒本身的元資料,執行緒的排程,執行緒上下文的切換等。 4.1有
Ubuntu下protobuf的安裝、編譯及注意事項
Ubuntu下編譯protobuf 1.下載protobuf 下載地址:https://github.com/google/protobuf/releases 2.編譯protobuf 解壓下載的zip包,cd到protobuf的目錄下,執行以下指令: tar -xvf pro
tokuDB儲存引擎的安裝、配置、使用及注意事項
平臺支援: TokuDB 只能在 64-bit Linux 下使用. 最小記憶體要求: TokuDB 需要至少1GB 的實體記憶體,當然這裡建議最好是 2GB . 1、安裝mysql(可以是mariadb、percona或oracle mysql) 安裝p
繼承的概述及特點,方法重寫的應用場景&注意事項
第1章 繼承 1.1 繼承的概述 在現實生活中,繼承一般指的是子女繼承父輩的財產。在程式中,繼承描述的是事物之間的所屬關係,通過繼承可以使多種事物之間形成一種關係體系。 1.2 繼承的格式&使用 在程式中,如果想宣告一個類繼承另一個類,需要使用extends關鍵字。 格式
C# 根據當前時間計算周、月、季度、年的換算及注意事項
public static void ShowTime() { /* * 根據當前時間進行時間段轉換: * 本週、下週、上週 *
Tensorflow兩種資料讀取方法應用、對比及注意事項
本文對比介紹了兩種Tensorflow針對大資料集的資料讀取方法,具體來說是:方法1:tf.train.slice_input_producer+流水線(這裡用這個API指代這一類,其實還有其他的API)。方法2:Dataset方法,據說是Tensorflow 1.3版本之後
【java基礎】abstract抽象類、方法的特點及注意事項
摘要:本文引自畢老師Java程式碼。 /* 抽象類: 抽象:籠統,模糊,看不懂!不具體。 特點: 1,方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。 抽象方法必須定義在抽象類中。該類必須也被abstract修飾。 2,抽象類不可以被例項化。
二叉樹常用操作演算法集、解釋及注意事項
二叉樹是一種常用的資料結構,在程式中也經常需要使用二叉樹,但是你所使用語言卻並不一定提供了二叉樹這種資料型別,所以為了方便使用,我們可以自己實現一個二叉樹的資料型別。在需要時就像使用其他已定義的型別一樣方便。 下面給出一些本人寫的演算法和解釋(基於C語言),希望對讀者寫一
關於Android 5.0 、6.0 、 7.0程式碼設定WIFI連線方式為靜態IP或DHCP的方法及注意事項
注意:Android6.0以上app不具備刪除,修改WiFi許可權。 如果是自己APP通過程式碼連線的,(如果系統本來就記住了該WIFI,APP裡通過程式碼在連線一次不算),需要許可權 <uses-permission android:name="android.p
MySql指令、用法及注意事項
MySql指令 查看錶結構 desc table_name; 修改某一列的資料型別 假設表stu有一列id原本的資料型別是int(11)將其型別改為varchar(20)的語句如下:
mac下用git操作(push、pull)過程及注意事項
如果存在,先將已有的ssh備份,或者將新建的ssh生成到另外的目錄下 如果不存在,通過預設的引數直接生成ssh 生成過程如下: $ssh-keygen -t rsa -C [email protected](註冊github
ERP選型準備、方法及注意事項
摘要:伴隨著市場的需求,ERP系統管理廠商如雨後春筍般推向市場,企業在選擇時面臨著多種選擇。本文怡海軟體將針對ERP系統如何選型從選型前的準備工作、瞭解ERP廠商、如何選擇及注意事項等方面進行簡要闡述。關鍵詞:ERP,SAP,Oracle,infor接觸過ERP(Enterprise Resource Pla