記一次線上故常處理

前言

作為一個開發(fā)唱较,肯定會遇到線上問題扎唾,遇到線上故障快速的定位解決,是開發(fā)者一項必備的能力南缓。工作中可能會遇到各種故障胸遇,這邊主要記錄下之前遇到的一個線上問題

問題描述

早上到辦公室打開釘釘,發(fā)現(xiàn)線上應用的一個實例重啟了…..

臥槽感覺情況不妙!!!

image

迅速打開sls看下線上日志情況汉形,一看果然有問題

oom了….

image

自己登錄系統(tǒng)大致瀏覽了下纸镊,系統(tǒng)比較正常,應該是重啟之后概疆,使用過程中沒發(fā)生異常情況逗威,感覺應該是偶發(fā)情況,準備看下代碼慢慢定位下問題岔冀,再解決凯旭。

就在這時,系統(tǒng)的用戶找過來了

image

于此同時發(fā)現(xiàn),公司內(nèi)部運維系統(tǒng)消息推送群罐呼,出現(xiàn)一大波線上實例重啟的日志

感覺這個問題很嚴重呀…...

image

問題分析

再次到sls看下鞠柄,竟然沒有發(fā)現(xiàn)異常日志,這是怎么回事呢弄贿?

找運維問下吧

運維給出的回復是OOM了春锋,但是我這邊最近幾次oom的日志,我這邊不確定和上面的是不是同一個問題(上一次有明確的日志差凹,這幾次實例重啟沒有日志呀)

image

隨后運維給出了線上服務的cpu期奔、內(nèi)存使用情況

OOMKilled 是因為實例內(nèi)存超過了K8S給它分配的最高允許內(nèi)存,所以K8S就把它oomkill掉

image

但是我還是懷疑和上面是同一個問題危尿,我結合上面日志描述的異衬琶龋看了下代碼,然后我找到上面報錯日志指向的接口谊娇,一看真的是要罵娘(當然自己代碼寫的也很爛)肺孤,這代碼寫的呀…...

image

這種代碼頻繁訪問接口,線程創(chuàng)建的多了济欢,肯定會有很大的內(nèi)存占用赠堵,K8s檢測到了那就把實例殺掉了呀

用過CompletableFuture的同學就知道,默認情況下 CompletableFuture 會使用公共的 ForkJoinPool 線程池法褥,這個線程池默認創(chuàng)建的線程數(shù)是 CPU 的核數(shù)(也可以通過 JVM option:-Djava.util.concurrent.ForkJoinPool.common.parallelism 來設置 ForkJoinPool 線程池的線程數(shù))茫叭。如果所有 CompletableFuture 共享一個線程池,那么一旦有任務執(zhí)行一些很慢的 I/O 操作半等,就會導致線程池中所有線程都阻塞在 I/O 操作上揍愁。這樣等有大請求量過來,處理邏輯又很復雜杀饵,很多線程都在等待執(zhí)行莽囤,慢慢拖垮了服務器。

這個異常問題本質原因是我們創(chuàng)建了太多的線程切距,而能創(chuàng)建的線程數(shù)是有限制的朽缎,導致了異常的發(fā)生。能創(chuàng)建的線程數(shù)的具體計算公式如下

(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads

  • MaxProcessMemory 指的是一個進程的最大內(nèi)存
  • JVMMemory JVM內(nèi)存
  • ReservedOsMemory 保留的操作系統(tǒng)內(nèi)存
  • ThreadStackSize 線程棧的大小

在java語言里谜悟, 當你創(chuàng)建一個線程的時候话肖,虛擬機會在JVM內(nèi)存創(chuàng)建一個Thread對象同時創(chuàng)建一個操作系統(tǒng)線程,而這個系統(tǒng)線程的內(nèi)存用的不是JVMMemory赌躺,而是系統(tǒng)中剩下的內(nèi)存(MaxProcessMemory - JVMMemory - ReservedOsMemory)狼牺。由公式得出結論:你給JVM內(nèi)存越多,那么你能創(chuàng)建的線程越少礼患,越容易發(fā)生 java.lang.OutOfMemoryError: unable to create new native thread

問題復現(xiàn)

那么問題基本可以確定了是钥,根據(jù)接口找到對應的頁面掠归,然后在預發(fā)環(huán)境頻繁瀏覽那個頁面,然后我讓運維到宿主機和容器看下具體的情況(看看這線程數(shù)量漲的…..)悄泥,果然又發(fā)現(xiàn)預發(fā)的實例也重啟了虏冻!

image

問題解決

問題定位了清楚就好解決了呀

剛才的代碼對應的地方改成自定義線程池就好了

//可以指定線程池  
static CompletableFuture<Void> 
  runAsync(Runnable runnable, Executor executor)

改完上線,線上立馬穩(wěn)了…...

問題總結

  • 線程屬于寶貴資源弹囚,使用的時候盡量使用線程池管理厨相,在使用線程池的時候,要注意盡量使用自定義線程池鸥鹉,明確線程池中的各個參數(shù)
  • codereview很重要呀!!!

碼字不易蛮穿,覺得還不錯可以點個贊

原文地址

http://cbaj.gitee.io/blog/2020/06/19/%E8%AE%B0%E4%B8%80%E6%AC%A1%E7%BA%BF%E4%B8%8A%E6%95%85%E5%B8%B8%E5%A4%84%E7%90%86/#more

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毁渗,隨后出現(xiàn)的幾起案子践磅,更是在濱河造成了極大的恐慌,老刑警劉巖灸异,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府适,死亡現(xiàn)場離奇詭異,居然都是意外死亡肺樟,警方通過查閱死者的電腦和手機檐春,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來么伯,“玉大人疟暖,你說我怎么就攤上這事”目瘢” “怎么了誓篱?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵朋贬,是天一觀的道長凯楔。 經(jīng)常有香客問我,道長锦募,這世上最難降的妖魔是什么摆屯? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮糠亩,結果婚禮上虐骑,老公的妹妹穿的比我還像新娘。我一直安慰自己赎线,他們只是感情好廷没,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垂寥,像睡著了一般颠黎。 火紅的嫁衣襯著肌膚如雪另锋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天狭归,我揣著相機與錄音夭坪,去河邊找鬼。 笑死过椎,一個胖子當著我的面吹牛室梅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疚宇,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼亡鼠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敷待?” 一聲冷哼從身側響起拆宛,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讼撒,沒想到半個月后浑厚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡根盒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年钳幅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炎滞。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡敢艰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出册赛,到底是詐尸還是另有隱情钠导,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布森瘪,位于F島的核電站牡属,受9級特大地震影響,放射性物質發(fā)生泄漏扼睬。R本人自食惡果不足惜逮栅,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窗宇。 院中可真熱鬧措伐,春花似錦、人聲如沸军俊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粪躬。三九已至担败,卻和暖如春矗蕊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氢架。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工傻咖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岖研。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓卿操,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孙援。 傳聞我的和親對象是個殘疾皇子害淤,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361