close_wait問題記錄

前言

有一次商戶反映訪問我們服務(wù)出現(xiàn)問題,很多超時現(xiàn)象萄涯,我們登陸服務(wù)器查詢問題時绪氛,發(fā)現(xiàn)-bash: fork: retry: 資源暫時不可用,并檢查了系統(tǒng)的tcp連接的情況涝影,發(fā)現(xiàn)closewait非常多枣察。

問題描述

現(xiàn)象有

  1. 商戶連接不到我們的服務(wù)
  2. xshell登陸服務(wù)器報 bash: fork: retry: 資源暫時不可用
  3. 查看系統(tǒng)tcp連接情況,發(fā)現(xiàn) closewait非常多
  4. 應(yīng)用進程存活燃逻,日志正常打印序目。

我準備從外到內(nèi)分析問題。網(wǎng)絡(luò)-》系統(tǒng)-》應(yīng)用伯襟。

1. 網(wǎng)絡(luò)

商戶訪問不到我們服務(wù)猿涨,這牽扯到的網(wǎng)絡(luò)測問題非常多。我聯(lián)系了網(wǎng)絡(luò)部同事姆怪,詢問這個時間段是否有商戶訪問我司網(wǎng)絡(luò)出現(xiàn)問題叛赚,網(wǎng)絡(luò)部確定沒有問題澡绩。

2. 系統(tǒng)

2.1 資源暫時不可用

出現(xiàn) bash: fork: retry: 資源暫時不可用。我查詢資料俺附,結(jié)果如下:

可能是因為資源限制肥卡,要么是系統(tǒng)自己的,要么是系統(tǒng)的用戶下昙读。資源限制可用通過 ulimit -a 查看召调。ulimit -u 會打印最大用戶進程數(shù)。如果超過了最大進程數(shù)蛮浑,fork不能創(chuàng)建新的進程唠叛,就會打印上面的錯誤。也有可能是因為交換內(nèi)存資源問題沮稚。

我就使用ulimit -u查看最大用戶進程數(shù)是1024艺沼。

2.2 tcp closewait很多

tcp closewait 是在關(guān)閉連接時,服務(wù)端的一個中間狀態(tài)蕴掏。這里先介紹下tcp連接釋放障般。

2.2.1 tcp 釋放連接過程

tpc_close__.jpg

tpc建立連接完成,數(shù)據(jù)傳輸結(jié)束后盛杰,通信的雙方都可以釋放連接⊥斓矗現(xiàn)在A和B都處于建立連接的狀態(tài)。A的應(yīng)用進程先向其TCP發(fā)出連接釋放報文段即供,并停止再發(fā)送數(shù)據(jù)定拟,主動關(guān)閉TCP連接。A把連接釋放報文段首部FIN置1逗嫡,其序號seq=u青自,它等于前面已傳送過的數(shù)據(jù)最后一個字節(jié)的序號加1。這時A處于FIN-WAIT-1(終止等待1)驱证,等待B確認延窜。注意,TPC規(guī)定抹锄,fin報文即使不攜帶數(shù)據(jù)逆瑞,也要消耗一個序號。

B收到連接釋放報文段后即發(fā)出確認伙单,而這個報文段自己的序號是v呆万,等于B前面已經(jīng)傳送過的數(shù)據(jù)最后一個字節(jié)的序號加1,然后B就進入CLOSE-WAIT狀態(tài)车份。TCP服務(wù)器進程就應(yīng)通知高層應(yīng)用進程,因而從A到B這個方向的連接就釋放了牡彻,這是TCP處于半關(guān)閉狀態(tài)扫沼,即A已經(jīng)沒有數(shù)據(jù)要發(fā)送了出爹,但是B若發(fā)送數(shù)據(jù),A仍要接收缎除。也就是說严就,從B到A這個方向的連接并未關(guān)閉。這個狀態(tài)可能會持續(xù)一些時間

A收到來自B的確認后器罐,就進入了FIN-WAIT-2(終止等待2)梢为,等待B發(fā)出的連接釋放報文段。

若B已經(jīng)沒有要向A發(fā)送的數(shù)據(jù)轰坊,其應(yīng)用程序就通知TCP釋放連接铸董。這時B發(fā)出的連接釋放報文段必須使FIN=1。現(xiàn)假設(shè)B的序號是w(在半關(guān)閉狀態(tài)B有可能發(fā)送了一些數(shù)據(jù))肴沫。B還必須重復(fù)上次已發(fā)送過的確認號ack=u+1粟害。這時B就進入LAST-ACK(最后確認狀態(tài)),等待A的確認颤芬。

A在收到B的連接釋放報文后段后悲幅,必須對此發(fā)出確認。在確認報文段中把ACK置1站蝠,確認號ack=w+1汰具,而自己的序號是seq=u+1(根據(jù)TCP標準,前面發(fā)送過的FIN報文段要消耗一個序號)菱魔。然后進入TIME-WAIT(時間等待狀態(tài))留荔。請注意新增的TCP連接還沒有釋放掉。必須經(jīng)過時間等待計數(shù)器設(shè)置的時間2MSL后豌习,A才進入CLOSED狀態(tài)存谎。時間MSL叫做最長報文段壽命,RFC793建議設(shè)為2分鐘肥隆。但這完全是從工程上考慮既荚,對于現(xiàn)在的網(wǎng)絡(luò),MSL=2分鐘可能太長了栋艳。因此TCP允許不同的實現(xiàn)可根據(jù)具體情況使用最小的MSL值恰聘。因此從A進入TIME-WAIT狀態(tài)后,要經(jīng)過4分鐘才能進入到CLOSED的狀態(tài)吸占,才能開始建立下一個新的連接晴叨。當A撤銷相應(yīng)的傳輸控制塊TCB后,就結(jié)束了這次TCP連接矾屯。

B只要接收到了A發(fā)出的確認兼蕊,就進入CLOSED狀態(tài)。同樣件蚕,B在撤銷相應(yīng)的傳輸控制塊TCB后孙技,就結(jié)束了這次TCP連接产禾。我們注意到,B結(jié)束TCP連接的時間要比A早一些牵啦。

上述連接釋放是四次握手亚情,但也可以看作是兩個兩次握手。

2.2.2 存在大量 close-wait的原因

CLOSE-WAIT的狀態(tài)是B已經(jīng)知道A不在向B發(fā)送數(shù)據(jù)哈雏,因此B在合適的時間段內(nèi)可以讓其應(yīng)用程序通知TCP釋放連接楞件。那現(xiàn)在的問題是B的應(yīng)用程序為什么遲遲不通知TCP釋放連接,是應(yīng)用程序掛了裳瘪,還是應(yīng)用程序的資源達到臨界值土浸,不能夠做出 通知TCP釋放連接這個操作。回想到剛才提到了系統(tǒng)資源不可用盹愚,會不會是因為B的應(yīng)用程序想通知TCP釋放連接栅迄,但是由于沒有系統(tǒng)資源,而無法執(zhí)行這個操作皆怕。

我們查看了服務(wù)器的應(yīng)用部署情況毅舆,發(fā)現(xiàn)該服務(wù)器部署很多應(yīng)用,每個應(yīng)用響應(yīng)tcp請求的線程池都是100+愈腾,在業(yè)務(wù)高峰期憋活,很有可能達到最大用戶進程數(shù)1024,從而引發(fā)這一系列的問題虱黄。

應(yīng)用

應(yīng)用測設(shè)置的響應(yīng)tcp請求的線程池都是100+悦即,并且當時服務(wù)器部署應(yīng)用很多。

解決方案

  • 增大系統(tǒng)用戶進程數(shù)限制
  • 遷移部分不重要的應(yīng)用到其他服務(wù)器橱乱,降低服務(wù)器壓力

思考

  1. 為什么之前沒有暴漏出來辜梳。業(yè)務(wù)高峰期,為什么會將系統(tǒng)資源吃滿泳叠。實際的系統(tǒng)吞吐量和tps是多少作瞄。是不是我們業(yè)務(wù)處理能力較之前有降低。
  2. 質(zhì)量監(jiān)控體系中缺少壓測環(huán)節(jié)危纫。

后記

隨著5g的普及宗挥,網(wǎng)絡(luò)的速度得到巨大的提升,掌握網(wǎng)絡(luò)知識已經(jīng)是必不可少的技能之一种蝶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末契耿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子螃征,更是在濱河造成了極大的恐慌搪桂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盯滚,死亡現(xiàn)場離奇詭異锅棕,居然都是意外死亡拙泽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門裸燎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泼疑,你說我怎么就攤上這事德绿。” “怎么了退渗?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵移稳,是天一觀的道長。 經(jīng)常有香客問我会油,道長个粱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任翻翩,我火速辦了婚禮都许,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫂冻。我一直安慰自己胶征,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布桨仿。 她就那樣靜靜地躺著睛低,像睡著了一般。 火紅的嫁衣襯著肌膚如雪服傍。 梳的紋絲不亂的頭發(fā)上钱雷,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天仰担,我揣著相機與錄音舶沛,去河邊找鬼。 笑死纫骑,一個胖子當著我的面吹牛瘪校,可吹牛的內(nèi)容都是我干的澄暮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阱扬,長吁一口氣:“原來是場噩夢啊……” “哼泣懊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起麻惶,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馍刮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窃蹋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡啰,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡静稻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了匈辱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片振湾。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亡脸,靈堂內(nèi)的尸體忽然破棺而出押搪,到底是詐尸還是另有隱情,我是刑警寧澤浅碾,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布大州,位于F島的核電站,受9級特大地震影響垂谢,放射性物質(zhì)發(fā)生泄漏厦画。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一滥朱、第九天 我趴在偏房一處隱蔽的房頂上張望根暑。 院中可真熱鬧,春花似錦焚虱、人聲如沸购裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躏率。三九已至,卻和暖如春民鼓,著一層夾襖步出監(jiān)牢的瞬間薇芝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工丰嘉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夯到,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓饮亏,卻偏偏與公主長得像耍贾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子路幸,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容