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

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

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

3天內不再提示

線上四臺機器同一時間全部OOM,到底發(fā)生了什么?

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 2023-02-08 15:28 ? 次閱讀

案發(fā)現(xiàn)場

昨天晚上突然短信收到 APM (即 Application Performance Management 的簡稱,我們內部自己搭建了這樣一套系統(tǒng)來對應用的性能、可靠性進行線上的監(jiān)控和預警的一種機制)大量告警畫外音: 監(jiān)控是一種非常重要的發(fā)現(xiàn)問題的手段,沒有的話一定要及時建立哦

緊接著運維打來電話告知線上部署的四臺機器全部 OOM (out of memory, 內存不足),服務全部不可用,趕緊查看問題!

問題排查

首先運維先重啟了機器,保證線上服務可用,然后再仔細地看了下線上的日志,確實是因為 OOM 導致服務不可用

680a4348-a761-11ed-bfe3-dac502259ad0.png

第一時間想到 dump 當時的內存狀態(tài),但由于為了讓線上盡快恢復服務,運維重啟了機器,導致無法 dump 出事發(fā)時的內存。所以我又看了下我們 APM 中對 JVM 的監(jiān)控圖表

畫外音:一種方式不行,嘗試另外的角度切入!再次強調,監(jiān)控非常重要!完善的監(jiān)控能還原當時的事發(fā)現(xiàn)場,方便定位問題。

681ef536-a761-11ed-bfe3-dac502259ad0.png

不看不知道,一看嚇一跳,從 16:00 開始應用中創(chuàng)建的線程居然每時每刻都在上升,一直到 3w 左右,重啟后(藍色箭頭),線程也一直在不斷增長),正常情況下的線程數(shù)是多少呢,600!問題找到了,應該是在下午 16:00 左右發(fā)了一段有問題的代碼,導致線程一直在創(chuàng)建,且創(chuàng)建的線程一直未消亡!查看發(fā)布記錄,發(fā)現(xiàn)發(fā)布記錄只有這么一段可疑的代碼 diff:在 HttpClient 初始化的時候額外加了一個evictExpiredConnections配置

682b5b0a-a761-11ed-bfe3-dac502259ad0.png

問題定位了,應該是就是這個配置導致的!(線程上升的時間點和發(fā)布時間點完全吻合!),于是先把這個新加的配置給干掉上線,上線之后線程數(shù)果然恢復正常了。那evictExpiredConnections做了什么導致線程數(shù)每時每刻在上升呢?這個配置又是為了解決什么問題而加上的呢?于是找到了相關同事來了解加這個配置的前因后果

還原事發(fā)經過

最近線上出現(xiàn)不少NoHttpResponseException的異常, 而上面那個配置就是為了解決這個異常而添加的,那是什么導致了這個異常呢?

在說這個問題之前我們得先了解一下 http 的 keep-alive 機制。

先看下正常的一個 TCP 連接的生命周期

6843813a-a761-11ed-bfe3-dac502259ad0.png

可以看到每個 TCP 連接都要經過三次握手建立連接后才能發(fā)送數(shù)據(jù),要經過四次揮手才能斷開連接,如果每個 TCP 連接在 server 返回 response 后都立馬斷開,則發(fā)起多個 HTTP 請求就要多次創(chuàng)建斷開 TCP, 這在Http 請求很多的情況下無疑是很耗性能的, 如果在 server 返回 response 不立即斷開 TCP 鏈接,而是復用這條鏈接進行下一次的 Http 請求,則無形中省略了很多創(chuàng)建 / 斷開 TCP 的開銷,性能上無疑會有很大提升。

如下圖示,左圖是不復用 TCP 發(fā)起多個 HTTP 請求的情況,右圖是復用 TCP 的情況,可以看到發(fā)起三次 HTTP 請求,復用 TCP 的話可以省去兩次建立 / 斷開 TCP 的開銷,理論上一個應用只要開啟一個 TCP 連接即可,其他 HTTP 請求都可以復用這個 TCP 連接,這樣 n 次 HTTP 請求可以省去 n-1 次創(chuàng)建 / 斷開 TCP 的開銷。這對性能的提升無疑是有巨大的幫助。

6853a646-a761-11ed-bfe3-dac502259ad0.png

回過頭來看 keep-alive (又稱持久連接,連接復用)做的就是復用連接, 保證連接持久有效。

畫外音: Http 1.1 之后 keep-alive 默認支持并開啟,目前大部分網站都用了 http 1.1 了,也就是說大部分都默認支持連接復用了

天下沒有免費的午餐,雖然 keep-alive 省去了很多不必要的握手/揮手操作,但由于連接長期保活,如果一直沒有 http 請求的話,這條連接也就長期閑著了,會占用系統(tǒng)資源,有時反而會比復用連接帶來更大的性能消耗。所以我們一般會為 keep-alive 設置一個 timeout, 這樣如果連接在設置的 timeout 時間內一直處于空閑狀態(tài)(未發(fā)生任何數(shù)據(jù)傳輸),經過 timeout 時間后,連接就會釋放,就能節(jié)省系統(tǒng)開銷。

看起來給 keep-alive 加 timeout 是完美了,但是又引入了新的問題(一波已平,一波又起!),考慮如下情況:

如果服務端關閉連接,發(fā)送 FIN 包(注:在設置的 timeout 時間內服務端如果一直未收到客戶端的請求,服務端會主動發(fā)起帶 FIN 標志的請求以斷開連接釋放資源),在這個 FIN 包發(fā)送但是還未到達客戶端期間,客戶端如果繼續(xù)復用這個 TCP 連接發(fā)送 HTTP 請求報文的話,服務端會因為在四次揮手期間不接收報文而發(fā)送 RST 報文給客戶端,客戶端收到 RST 報文就會提示異常 (即NoHttpResponseException)

我們再用流程圖仔細梳理一下上述這種產生NoHttpResponseException的原因,這樣能看得更明白一些

686b5fca-a761-11ed-bfe3-dac502259ad0.png

費了這么大的功夫,我們終于知道了產生NoHttpResponseException的原因,那該怎么解決呢,有兩種策略

重試,收到異常后,重試一兩次,由于重試后客戶端會用有效的連接去請求,所以可以避免這種情況,不過一次要注意重試次數(shù),避免引起雪崩!

設置一個定時線程,定時清理上述的閑置連接,可以將這個定時時間設置為 keep alive timeout 時間的一半以保證超時前回收。

evictExpiredConnections就是用的上述第二種策略,來看下官方用法使用說明

Makes this instance of HttpClient proactively evict idle connections from the connection pool using a background thread.

調用這個方法只會產生一個定時線程,那為啥應用中線程會一直增加呢,因為我們對每一個請求都創(chuàng)建了一個 HttpClient! 這樣由于創(chuàng)建每一個 HttpClient 實例j時都會調用 evictExpiredConnections,導致有多少請求就會創(chuàng)建多少個定時線程!

還有一個問題,為啥線上四臺機器幾乎同一時間點全掛呢?因為由于負載均衡,這四臺機器的權重是一樣的,硬件配置也一樣,收到的請求其實也可以認為是差不多的,這樣這四臺機器由于創(chuàng)建 HttpClient 而生成的后臺線程也在同一時間達到最高點,然后同時 OOM。

解決問題

所以針對以上提到的問題,我們首先把 HttpClient 改成了單例,這樣保證服務啟動后只會有一個定時清理線程,另外我們也讓運維針對應用的線程數(shù)做了監(jiān)控,如果超過某個閾值直接告警,這樣能在應用 OOM 前及時發(fā)現(xiàn)處理。

畫外音:再次強調,監(jiān)控相當重要,能把問題扼殺在搖籃里!

總結

本文通過線上四臺機器同時 OOM 的現(xiàn)象,來詳細剖析定位了產生問題的原因,可以看到我們在應用某個庫時首先要對這個庫要有充分的了解(上述 HttpClient 的創(chuàng)建不用單例顯然是個問題),其次必要的網絡知識還是需要的,所以要成為一個合格的程序員,不光對語言本身有所了解,還要對網絡,數(shù)據(jù)庫等也要有所涉獵,這些對排查問題以及性能調優(yōu)等會有非常大的幫助,再次,完善的監(jiān)控非常重要,通過觸發(fā)某個閾值提前告警,可以將問題扼殺在搖籃里!

審核編輯 :李倩

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

    關注

    0

    文章

    784

    瀏覽量

    40757
  • APM
    APM
    +關注

    關注

    1

    文章

    71

    瀏覽量

    13017
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19705

原文標題:震驚!線上四臺機器同一時間全部 OOM,到底發(fā)生了什么?

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何保證同一時間串口只進行個操作

    程序在運行的時候,有些地方串口是要寫入,有些地方是要讀取,但兩個地方是同時運行的,那么我該怎么去保證在同一時間內,同一個串口只進行個操作,要么讀取要么寫入。就是如何對這些操作進行
    發(fā)表于 02-05 09:31

    可以請教大家個問題嗎!大家能幫我看看這個板子是不是上錯物料呢!就是同一時

    可以請教大家個問題嗎!大家能幫我看看這個板子是不是上錯物料呢!就是同一時間生產,可是兩個板子就出現(xiàn)兩個情況!個板子上的開關芯片內阻抗非常大,個正常! . 因為選用的是美
    發(fā)表于 05-01 19:58

    電源電路控制,使用與非門的74,不知道這樣的是需要設計個什么樣的電路?

    您好:我想做個小型的電路,主要實現(xiàn)以下功能:倆個u***口全部正常無損壞,同一時間如果插入個可以充電傳輸,另個就斷開不能充電傳輸(
    發(fā)表于 04-03 12:01

    請問OLED顯示屏可以讓整幀畫面同一時間顯示出來嗎,而不是行掃?

    OLED顯示屏是否可以讓整幀畫面同一時間顯示出來,而不是行掃?
    發(fā)表于 07-23 16:35

    多個SmartXplorer在一臺機器上運行

    嗨,我想在一臺機器上運行多個smartXplorer運行,即我有兩個不同的項目,并希望在同一臺機器上運行SmartXplorer。但是,當試圖啟動第二個SmartXplorer運行時,我被告知它
    發(fā)表于 10-17 14:15

    ad9361基帶信號輸入為什么P路在同一時間周期內攜帶兩個相位相反的信號?

    。 data_p與data_n是組相位相反的信號。為什么P路在同一時間周期內攜帶兩個相位相反的信號? 對后面的DA轉換有什么影響??現(xiàn)在在看手冊,還沒看這方面的解釋~~望大神指點!!!! 附上程序圖
    發(fā)表于 02-25 10:49

    為什么般的無線遙控玩具同一時間只能控制個電機轉動

    大家好,我想問個可能很幼稚的問題:為什么般的無線遙控玩具同一時間只能控制個電機轉動,買了個2.4GHz的無線遙控器+4通道電機控制,
    發(fā)表于 07-02 06:37

    為什么我打印出來的都是同一時間的CPU使用率?

    求助:stm32+ucosii,統(tǒng)計CPU使用率,通過串口打印出來,結果打印出來的都是同一時間的CPU使用率希望大家?guī)臀铱?b class='flag-5'>一下,感激不盡!!!
    發(fā)表于 08-19 04:35

    UART和CAN總線在同一時間會怎么樣

    )。同時用1至4個串行端口進行SED。我知道可以使用PIC32 RAM來保存緩沖器。也許有更多的背景發(fā)生,我不知道。誰有相似的經驗,或者我有奇特的軟件,使UART和CAN總線在同一時間,以大約相同的速率起具有意想不到的數(shù)據(jù)?謝
    發(fā)表于 04-27 13:39

    可以在同一時間使用STM32WB55的外部RAM和FLASH呢?

    我正在嘗試向 STM32WB55 添加外部 FLASH 和 RAM,但他沒有 FMC 或 FSMC,并且可以找到與此主題相關的所有資源都使用 FMC 外設,有任何方法可以使用外部 RAM和FLASH在同一時間?我應該為它們都使用 1 QSPI 嗎?
    發(fā)表于 12-28 06:09

    百度對Robin第一時間做出回答:我沒說過

    幾個做創(chuàng)投的朋友見面第句話就是問Robin之事是否空穴來風?百度當然是第一時間做了辟謠回應,稱已于5月22日收集好證據(jù)向公安機關報了案。
    發(fā)表于 07-05 15:35 ?2492次閱讀

    高通、博通同一時間大量裁員_商量好了?

    15日最新消息,據(jù)路透社報道,美國芯片巨頭博通周宣布,在完成對博科通訊系統(tǒng)的收購后,已裁減了約1100名員工,以削減成本。與此同時,另家美國芯片巨頭高通15日(上午)也傳來裁員消息。據(jù)悉,高通數(shù)據(jù)中心芯片部門將裁減約280名員工。
    的頭像 發(fā)表于 06-19 16:16 ?4823次閱讀

    微軟第一時間采取措施適配搭載M1的macOS

    針對蘋果發(fā)布的基于ARM機構的M1桌面處理器,微軟已經第一時間跟進了。
    的頭像 發(fā)表于 11-12 14:19 ?1498次閱讀

    現(xiàn)場設備發(fā)生故障,虹科物聯(lián)網HMI第一時間通知相關人員?

    現(xiàn)場設備是保證企業(yè)正常生產的關鍵條件之,當設備發(fā)生故障時,如何能夠第一時間發(fā)現(xiàn)故障并通知相關人員,降低設備故障帶來的影響?今天我們將帶您了解虹科物聯(lián)網HMI如何發(fā)現(xiàn)設備故障,并第一時間
    的頭像 發(fā)表于 03-02 13:15 ?531次閱讀
    現(xiàn)場設備<b class='flag-5'>發(fā)生</b>故障,虹科物聯(lián)網HMI第<b class='flag-5'>一時間</b>通知相關人員?

    虹科方案 | 現(xiàn)場設備發(fā)生故障,如何第一時間通知相關人員?

    虹科IIoT現(xiàn)場設備發(fā)生故障,如何第一時間通知相關人員?虹科方案01前言虹科物聯(lián)網HMI作為站式物聯(lián)網解決方案,致力于解決用戶在數(shù)據(jù)采集和可視化、遠程監(jiān)控、邊緣計算、軟PLC、數(shù)據(jù)存儲(SQL
    的頭像 發(fā)表于 03-29 15:41 ?726次閱讀
    虹科方案 | 現(xiàn)場設備<b class='flag-5'>發(fā)生</b>故障,如何第<b class='flag-5'>一時間</b>通知相關人員?
    主站蜘蛛池模板: 97国产精品视频在线观看| 精品欧美一区二区三区四区| 被肉日常np快穿高h| 国产AV99激情久久无码天堂| 国产在线观看免费观看不卡| 老头xxx| 天天操夜夜噜| 中国人泡妞xxxxxxxx19| 成人欧美尽粗二区三区AV| 花蝴蝶高清观看免费| 欧美精品一区二区三区四区| 午夜影院c绿象| 99久久国内精品成人免费| 国产精品视频在线自在线| 蜜芽最新域名解析网站| 午夜向日葵高清在线观看| 99久久久久国产精品免费| 国产亚洲高清视频| 人妻中文字幕无码久久AV爆| 亚洲综合小说久久另类区| 动漫女生的逼| 免费播放美女一级毛片| 亚洲色大成网站www久久九九| 成人亚洲视频| 嗯呐啊唔高H兽交| 伊人久久免费| 狠狠撩色姣姣综合久久| 色戒西瓜视频| 啊灬啊别停灬用力啊在线观看视频 | 早乙女由依在线观看| 国产做国产爱免费视频| 日韩欧美一区二区中文字幕| 506070老熟肥妇bbwxx视频| 国产综合视频在线观看一区| 日韩在线中文字幕无码| chinesetoilet美女沟| 美女脱衣服搞鸡| 26uuu老色哥| 久久综合亚洲色hezyo| 一抽一出BGM免费3分钟| 精品无码乱码AV|