国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

學習Linux命令的正確姿勢

倩倩 ? 來源:開源Linux ? 作者:開源Linux ? 2022-08-31 10:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


	

學習Linux命令的正確姿勢


	

	

	

問題描述

模擬高并發的場景,會出現批量的 TIME_WAIT 的 TCP 連接:
cfb29db8-28d3-11ed-ba43-dac502259ad0.png短時間后,所有的 TIME_WAIT 全都消失,被回收,端口包括服務,均正常。即,在高并發的場景下,TIME_WAIT 連接存在,屬于正常現象。線上場景中,持續的高并發場景:
  • 一部分 TIME_WAIT 連接被回收,但新的 TIME_WAIT 連接產生;

  • 一些極端情況下,會出現大量的 TIME_WAIT 連接。

Think:上述大量的 TIME_WAIT 狀態 TCP 連接,有什么業務上的影響嗎?
Nginx 作為反向代理時,大量的短鏈接,可能導致 Nginx 上的 TCP 連接處于 time_wait 狀態:
  • 每一個 time_wait 狀態,都會占用一個「本地端口」,上限為 65535(16 bit,2 Byte);

  • 當大量的連接處于 time_wait 時,新建立 TCP 連接會出錯,address already in use : connect 異常

統計 TCP 連接的狀態:

	

		// 統計:各種連接的數量 $ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ESTABLISHED 1154 TIME_WAIT 1645Tips:TCP 本地端口數量,上限為 65535(6.5w),這是因為 TCP 頭部使用 16 bit,存儲「端口號」,因此約束上限為 65535。

問題分析

大量的 TIME_WAIT 狀態 TCP 連接存在,其本質原因是什么?
  1. 大量的短連接存在

  2. 特別是 HTTP 請求中,如果 connection 頭部取值被設置為 close 時,基本都由「服務端」發起主動關閉連接

  3. 而,TCP 四次揮手關閉連接機制中,為了保證 ACK 重發和丟棄延遲數據,設置 time_wait 為 2 倍的 MSL(報文最大存活時間)

TIME_WAIT 狀態:
  1. TCP 連接中,主動關閉連接的一方出現的狀態;(收到 FIN 命令,進入 TIME_WAIT 狀態,并返回 ACK 命令)

  2. 保持 2 個 MSL 時間,即,4 分鐘;(MSL 為 2 分鐘)

解決辦法

解決上述 time_wait 狀態大量存在,導致新連接創建失敗的問題,一般解決辦法:
  1. 客戶端,HTTP 請求的頭部,connection 設置為 keep-alive,保持存活一段時間:現在的瀏覽器,一般都這么進行了

  2. 服務器端 允許 time_wait 狀態的 socket 被重用 縮減 time_wait 時間,設置為 1 MSL(即,2 mins)

結論:幾個核心要點

  1. time_wait 狀態的影響:

  • TCP 連接中,「主動發起關閉連接」的一端,會進入 time_wait 狀態

  • time_wait 狀態,默認會持續 2 MSL(報文的最大生存時間),一般是 2x2 mins

  • time_wait 狀態下,TCP 連接占用的端口,無法被再次使用

  • TCP 端口數量,上限是 6.5w(65535,16 bit)

  • 大量 time_wait 狀態存在,會導致新建 TCP 連接會出錯,address already in use : connect 異常

  • 現實場景:

  • 服務器端,一般設置:不允許「主動關閉連接」

  • 但 HTTP 請求中,http 頭部 connection 參數,可能設置為 close,則,服務端處理完請求會主動關閉 TCP 連接

  • 現在瀏覽器中, HTTP 請求 connection 參數,一般都設置為 keep-alive

  • Nginx 反向代理場景中,可能出現大量短鏈接,服務器端,可能存在

  • 解決辦法:

  • 服務器端允許 time_wait 狀態的 socket 被重用

  • 縮減 time_wait 時間,設置為 1 MSL(即,2 mins)

附錄

幾個方面:
  1. TCP 連接狀態的查詢

  2. MSL 時間

  3. TCP 三次握手和四次握手

附錄 A:查詢 TCP 連接狀態Mac 下,查詢 TCP 連接狀態的具體命令:

	

		// Mac 下,查詢 TCP 連接狀態$ netstat -nat |grep TIME_WAIT // Mac 下,查詢 TCP 連接狀態,其中 -E 表示 grep 或的匹配邏輯$ netstat -nat | grep -E "TIME_WAIT|Local Address"Proto Recv-Q Send-Q Local Address Foreign Address (state)tcp4 0 0 127.0.0.1.1080 127.0.0.1.59061 TIME_WAIT // 統計:各種連接的數量$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'ESTABLISHED 1154TIME_WAIT 1645附錄 B:MSL 時間 MSL,Maximum Segment Lifetime,“報文最大生存時間”
  1. 任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。(IP 報文)

  2. TCP報文 (segment)是ip數據報(datagram)的數據部分。

Tips:RFC 793中規定MSL為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等。2MSL,TCP 的 TIME_WAIT 狀態,也稱為2MSL等待狀態:
  1. 當TCP的一端發起主動關閉(收到 FIN 請求),在發出最后一個ACK 響應后,即第3次握 手完成后,發送了第四次握手的ACK包后,就進入了TIME_WAIT狀態。

  2. 必須在此狀態上停留兩倍的MSL時間,等待2MSL時間主要目的是怕最后一個 ACK包對方沒收到,那么對方在超時后將重發第三次握手的FIN包,主動關閉端接到重發的FIN包后,可以再發一個ACK應答包。

  3. 在 TIME_WAIT 狀態時,兩端的端口不能使用,要等到2MSL時間結束,才可繼續使用。(IP 層)

  4. 當連接處于2MSL等待階段時,任何遲到的報文段都將被丟棄。 不過在實際應用中,可以通過設置 「SO_REUSEADDR選項」,達到不必等待2MSL時間結束,即可使用被占用的端口。

附錄 C:TCP 三次握手和四次握手 具體示意圖:
  1. 三次握手,建立連接過程

  2. 四次揮手,釋放連接過程

cfdcc5d4-28d3-11ed-ba43-dac502259ad0.png ?

良許花了一個半月的時間研發了一門 Linux 命令課程,歡迎購買學習!

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    14

    文章

    10251

    瀏覽量

    91478
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1424

    瀏覽量

    83496

原文標題:服務端 TCP 連接TIME_WAIT怎么破?77%的人都不知道~

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux新手必看!3個命令搞定所有“求助”,再也不用到處查文檔

    其實根本不用慌——Linux 早就自帶了 “說明書”,學會 3 個核心幫助命令,就能解決 90% 的操作疑問,比百度還快!
    的頭像 發表于 02-03 15:28 ?695次閱讀
    <b class='flag-5'>Linux</b>新手必看!3個<b class='flag-5'>命令</b>搞定所有“求助”,再也不用到處查文檔

    Linux 下開發嵌入式必備命令速查表

    在嵌入式開發中,Linux系統幾乎成為必備的開發環境。不管你是在做STM32、RaspberryPi、還是基于ARM的板子,熟練掌握Linux命令不僅能加快開發效率,還能讓你在調試、交叉編譯、文件
    的頭像 發表于 01-19 09:06 ?878次閱讀
    <b class='flag-5'>Linux</b> 下開發嵌入式必備<b class='flag-5'>命令</b>速查表

    學習Linux應該從哪里開始?

    在工業控制、邊緣計算、人工智能這些領域,有一句幾乎約定俗成的話: “會不會 Linux,決定了你能走多遠。” 但對很多剛入門的工程師來說,Linux 看起來像個龐大又神秘的世界——命令行、驅動、內核
    的頭像 發表于 10-16 09:51 ?450次閱讀
    <b class='flag-5'>學習</b><b class='flag-5'>Linux</b>應該從哪里開始?

    Linux基礎命令的進階用法

    凌晨2點,正在熟睡的你被電話驚醒:"線上服務響應超時,用戶大面積投訴!" 你匆忙打開電腦,SSH 登錄服務器,面對滿屏的進程和日志,腦子一片空白——從哪里開始排查?用什么命令?怎么快速定位問題?
    的頭像 發表于 09-02 16:33 ?690次閱讀

    測試工程師都在用的Linux命令清單(建議收藏)

    作為一名工程師,熟練掌握Linux命令是基本功中的基本功。無論是日常工作中的系統維護,還是面試時的技術考核,Linux命令都是繞不開的核心技能。本文將從實戰角度出發,系統梳理工程師必須
    的頭像 發表于 08-08 10:06 ?697次閱讀
    測試工程師都在用的<b class='flag-5'>Linux</b><b class='flag-5'>命令</b>清單(建議收藏)

    【「Yocto項目實戰教程:高效定制嵌入式Linux系統」閱讀體驗】+基礎概念學習理解

    系統的基礎知識,及yocto的基礎知識。這部分內容對于我這樣有一定 Linux 基礎的讀者來說,起到了很好的復習和鞏固作用,同時也為后續學習 Yocto 項目奠定了堅實的理論基礎。 元數據 元數據架構
    發表于 08-04 22:29

    Linux基礎命令which詳解

    Linux系統中,which命令用于查找并顯示指定命令的可執行文件路徑。這對于系統管理員和開發人員來說是一個非常有用的工具,可以幫助定位命令所在的位置,確認
    的頭像 發表于 07-29 17:58 ?847次閱讀

    linux系統awk特殊字符命令詳解

    Linux系統中,awk?是一種非常強大的文本處理工具,能夠對文本數據進行分析、格式化和篩選。利用其內置的特殊字符和操作符,用戶可以實現復雜的數據處理任務。以下對一些常見的awk特殊字符和操作符
    的頭像 發表于 07-28 16:38 ?635次閱讀

    一文掌握Linux命令

    作為一名運維工程師,熟練掌握Linux命令是基本功中的基本功。無論是日常工作中的系統維護,還是面試時的技術考核,Linux命令都是繞不開的核心技能。本文將從實戰角度出發,系統梳理運維工
    的頭像 發表于 07-22 15:23 ?610次閱讀

    詳解Linux網絡管理中的關鍵命令

    本文檔概述了網絡管理中的關鍵命令,如ifconfig配置網絡接口,ip管理路由,ping測試連通性,以及nmap進行安全掃描。還介紹了nslookup和dig用于域名解析,tcpdump抓包分析,以及arp操作和nmap的深入應用。
    的頭像 發表于 07-04 11:37 ?1148次閱讀
    詳解<b class='flag-5'>Linux</b>網絡管理中的關鍵<b class='flag-5'>命令</b>

    Linux系統管理的核心概念

    在前一篇文章中,我們深入探討了Linux中的文件操作命令,如cp、mv、rm,以及文本處理命令grep、wc和管道符。本文將繼續深入Linux系統管理的核心概念,包括root用戶的角色
    的頭像 發表于 05-15 17:05 ?661次閱讀

    為什么無法在Linux SDK中找到重置端點和中止端點功能的等效命令

    你好,我有客戶正在使用 Linux 開發他們的軟件界面。 我們的窗口應用程序可以運行,但他們想轉換到 Linux。 他們無法在 Linux SDK 中找到重置端點和中止端點功能的等效命令
    發表于 05-07 07:24

    Linux常用命令大全

    Linux常用命令是指在Linux操作系統中廣泛使用的命令工具,這些命令工具可以完成各種不同的任務,如管理文件和目錄、操作進程、網絡通信、軟
    的頭像 發表于 05-03 18:08 ?1861次閱讀

    5個Linux性能監控命令

    vmstat 命令可打印有關內存、交換、I/O 和 CPU 活動的詳細報告。其中包括已用/可用內存、交換入/出、磁盤塊讀/寫和 CPU 進程/閑置時間等指標。
    的頭像 發表于 04-09 10:34 ?813次閱讀

    Linux下Vim編輯器的使用技巧

    【Vim】常用總結? 簡介? image 什么是vim?? Linux下兩大編輯神器之一 vim ? Linux/Unix下使用最多的編輯器 ? vi的改進版 ? 可能是最難上手的編輯器之一
    的頭像 發表于 04-01 17:36 ?1422次閱讀
    <b class='flag-5'>Linux</b>下Vim編輯器的使用技巧