日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

美團一面,你碰到過CPU 100%的情況嗎?你是怎么處理的?

來源: 責編: 時間:2024-05-27 17:15:59 201觀看
導讀CPU被打滿的常見原因1. 死循環在實際工作中,可能每個開發都寫過死循環的代碼。死循環有兩種:在 while、for、forEach 循環中的死循環。無限遞歸。這兩種情況,程序會不停地運行,使用寄存器保存循環次數或者遞歸深度,一直占

CPU被打滿的常見原因

1. 死循環

在實際工作中,可能每個開發都寫過死循環的代碼。6WJ28資訊網——每日最新資訊28at.com

死循環有兩種:6WJ28資訊網——每日最新資訊28at.com

  1. 在 while、for、forEach 循環中的死循環。
  2. 無限遞歸。

這兩種情況,程序會不停地運行,使用寄存器保存循環次數或者遞歸深度,一直占用 cpu,導致 cpu 使用率飆升。6WJ28資訊網——每日最新資訊28at.com

在使用 JDK1.7 時,還有些死循環比如多線程的環境下,往 HashMap 中 put 數據,可能會導致鏈表出現死循環。6WJ28資訊網——每日最新資訊28at.com

就會導致cpu不斷飆高。6WJ28資訊網——每日最新資訊28at.com

2.大量GC

我之前參與過餐飲相關的業務系統開發,當時我所在的團隊是菜品的下游業務。6WJ28資訊網——每日最新資訊28at.com

當時菜品系統有菜品的更新,會發kafka消息,我們系統訂閱該topic,就能獲取到最近更新的菜品數據。6WJ28資訊網——每日最新資訊28at.com

同步菜品數據的功能,上線了一年多的時候,沒有出現過什么問題。6WJ28資訊網——每日最新資訊28at.com

但在某一天下午,我們收到了大量 CPU100% 的報警郵件。6WJ28資訊網——每日最新資訊28at.com

追查原因之后發現,菜品系統出現了 bug,我們每次獲取到的都是全量的菜品數據,并非增量的數據。6WJ28資訊網——每日最新資訊28at.com

一次性獲取的數據太多。6WJ28資訊網——每日最新資訊28at.com

菜品修改還是比較頻繁的,也就是說我們系統,會頻繁地讀取和解析大量的數據,導致 CPU 不斷飆升。6WJ28資訊網——每日最新資訊28at.com

其根本原因是頻繁的full gc。6WJ28資訊網——每日最新資訊28at.com

3. 大量計算密集型任務

有時候,我們的業務系統需要實時計算數據,比如:電商系統中需要實時計算優惠后的最終價格。6WJ28資訊網——每日最新資訊28at.com

或者需要在代碼中,從一堆數據中,統計匯總出我們所需要的數據。6WJ28資訊網——每日最新資訊28at.com

如果這個實時計算或者實時統計的場景,是一個非常耗時的操作,并且該場景的請求并發量還不小,就可能會導致 cpu 飆高。6WJ28資訊網——每日最新資訊28at.com

因為實時計算需要消耗 cpu 資源,如果一直計算,就會一直消耗 cpu 資源。6WJ28資訊網——每日最新資訊28at.com

4. 死鎖

為了防止并發場景中,多個線程修改公共資源,導致的數據異常問題,很多時候我們會在代碼中使用synchronized或者Lock加鎖。6WJ28資訊網——每日最新資訊28at.com

這樣多個線程進入臨界方法或者代碼段時,需要競爭某個對象或者類的鎖,只有搶到相應的鎖,才能訪問臨界資源。其他的線程,則需要等待,擁有鎖的線程釋放鎖,下一次可以繼續競爭那把鎖。6WJ28資訊網——每日最新資訊28at.com

有些業務場景中,某段代碼需要線程獲取多把鎖,才能完成業務邏輯。6WJ28資訊網——每日最新資訊28at.com

但由于代碼的 bug,或者釋放鎖的順序不正確,可能會引起死鎖的問題。6WJ28資訊網——每日最新資訊28at.com

例如:6WJ28資訊網——每日最新資訊28at.com

"pool-4-thread-1" prio=10 tid=0x00007f27bc11a000 nid=0x2ae9 waiting on condition [0x00007f2768ef9000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x0000000090e1d048> (a java.util.concurrent.locks.ReentrantLock$FairSync)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)

比如線程 a 擁有鎖 c,需要獲取鎖 d,才能完成業務邏輯。6WJ28資訊網——每日最新資訊28at.com

而剛好此時線程 b 擁有鎖 d,需要獲取鎖 c,才能完成業務邏輯。6WJ28資訊網——每日最新資訊28at.com

線程 a 等待線程 b 釋放鎖,而線程 b 等待線程 a 釋放鎖,兩個線程都持有對方需要的鎖,無法主動釋放,就會出現死鎖問題。6WJ28資訊網——每日最新資訊28at.com

死鎖會導致 CPU 使用率飆升。6WJ28資訊網——每日最新資訊28at.com

CPU被打滿如何排查

1. 使用系統工具和JDK自帶的jstack工具

第一步:使用top命令找出占用CPU最高的Java進程

首先,使用top命令確認是不是Java進程是罪魁禍首。Java進程要么是個后臺任務,要么是個jar包,比如一個Spring Boot服務。6WJ28資訊網——每日最新資訊28at.com

圖片圖片6WJ28資訊網——每日最新資訊28at.com

假設發現占用CPU 99.7%的線程是Java進程,進程PID為13731。6WJ28資訊網——每日最新資訊28at.com

第二步:找到占用CPU最高的線程

接下來,還是用top命令,只不過加一個參數-Hp,就是下面這樣:6WJ28資訊網——每日最新資訊28at.com

top -Hp 13731

H參數表示要顯示線程級別的信息,p則表示指定的pid,也就是進程ID。執行之后,這個Java進程中占用線程占用CPU的情況就列出來了。假設占用CPU最高的那個線程PID為13756。6WJ28資訊網——每日最新資訊28at.com

圖片圖片6WJ28資訊網——每日最新資訊28at.com

第三步:保存線程堆棧信息

這就要用到JDK默認提供的一個工具——jstack。jstack用于生成Java進程的線程快照(thread dump)。線程快照是一個關于Java進程中所有線程當前狀態的快照,包括每個線程的堆棧信息。通過分析線程快照,可以了解Java進程中各個線程的運行狀態、鎖信息等。6WJ28資訊網——每日最新資訊28at.com

我們用jstack的目的是將那個占用CPU最高的線程的堆棧信息搞下來,然后進一步分析。使用命令jstack pid > out.log將某個進程的堆棧信息輸出到out.log文件中。6WJ28資訊網——每日最新資訊28at.com

jstack 13731 > thread_stack.log

第四步:在線程棧中查找罪魁禍首的線程

將13756轉換為16進制,可以用在線進制轉換工具直接轉換,比如這個。轉換結果為0x35bc。6WJ28資訊網——每日最新資訊28at.com

然后在線程棧中,也就是上一步保存的那個thread_stack.log文件,查找這個16進制的線程ID(0x35bc)。6WJ28資訊網——每日最新資訊28at.com

這樣,我們就能看到需要的線程名稱、線程狀態,哪個方法的哪一行代碼消耗了最多的CPU都很清楚了。6WJ28資訊網——每日最新資訊28at.com

圖片圖片6WJ28資訊網——每日最新資訊28at.com

2. 使用Arthas探測工具

Arthas是阿里開源的一款線上監控診斷產品,通過全局視角實時查看應用load、內存、GC、線程的狀態信息,并能在不修改應用代碼的情況下,對業務問題進行診斷,包括查看方法調用的入參、異常,監測方法執行耗時,類加載信息等,大大提升線上問題排查效率。6WJ28資訊網——每日最新資訊28at.com

安裝Arthas

要使用Arthas,你需要先把它安裝到你的目標服務器上。6WJ28資訊網——每日最新資訊28at.com

  1. 下載jar包:
curl -O https://arthas.aliyun.com/arthas-boot.jar
  1. 啟動Arthas服務:
java -jar arthas-boot.jar

啟動之后,會列出當前這臺服務器上的所有Java進程,選擇你要排查的那個服務即可。出現arthas@之后表示已經啟動,并成功attach到目標進程上。6WJ28資訊網——每日最新資訊28at.com

圖片圖片6WJ28資訊網——每日最新資訊28at.com

可以輸入命令dashboard看一下實時面板,默認5秒刷新一次,在這個面板上能夠看到線程、內存堆棧、GC和Runtime的基本信息。如果你用過VisualVM的話,操作界面與之類似。6WJ28資訊網——每日最新資訊28at.com

找到占用CPU最高的線程

執行thread命令,這個命令會顯示所有線程的信息,并且把CPU使用率高的線程排在前面。6WJ28資訊網——每日最新資訊28at.com

這樣,一眼就看出來了,第一個線程的CPU使用率高達99%。6WJ28資訊網——每日最新資訊28at.com

圖片圖片6WJ28資訊網——每日最新資訊28at.com

查看堆棧信息

使用thread ID獲取堆棧信息,其實就是jstack pid相同的作用。通過前一步看到這個線程的ID是18,然后執行:6WJ28資訊網——每日最新資訊28at.com

thread 18

圖片圖片6WJ28資訊網——每日最新資訊28at.com

直接就看出來了出現問題的位置,比如TestController.java文件的high方法的第23行。然后可以進入代碼查看具體問題。6WJ28資訊網——每日最新資訊28at.com

參考答案

面試官:“你碰到過CPU 100%的情況嗎?你是怎么處理的?”6WJ28資訊網——每日最新資訊28at.com

生產環境如果cpu已經被打滿了,不要一上來就說什么top,jstack,記住,真實的生產環境如果CPU已經要被打爆了的話6WJ28資訊網——每日最新資訊28at.com

第一選擇肯定是重啟,并且如果你近段時間有發布的話,還要考慮是否可以回滾,保障生產環境的穩定性是最重要的6WJ28資訊網——每日最新資訊28at.com

還有就是,如果CPU已經被打爆了,不管arthas還是jstack大概率也是執行不了的,jvm無法響應6WJ28資訊網——每日最新資訊28at.com

我:“之前碰到過CPU被打滿的情況,我們線上第一時間做了重啟,在重啟的過程中,我們去查了服務在那段時間的日志、鏈路、指標,沒有發現特殊的異常。”6WJ28資訊網——每日最新資訊28at.com

有時候CPU100&會伴隨非常明顯的日志、鏈路或者指標異常。例如:通過gc的指標發現,發現full gc的次數激增,或者發現內存的使用率很高,這個時候大概率是因為gc導致的cpu 100%。這個時候就不要再去jstack了,應該第一次時間查看堆dump文件,確認是哪個對象占用了大量內存6WJ28資訊網——每日最新資訊28at.com

我:“當服務重啟完成后,我們開始排查具體的原因。我們通過定期執行top命令,發現java進程的CPU的使用率確實在慢慢增加”6WJ28資訊網——每日最新資訊28at.com

我:“接著,我通過top -Hp以及jstack命令拿到了應用里cpu使用率最高的那個線程的堆棧,通過分析堆棧最終定位到了具體的代碼,是因為代碼觸發了一個臨界值,進入了死循環”6WJ28資訊網——每日最新資訊28at.com

下面這段代碼是我實際工作碰到一個導致線上CPU 100%的代碼:6WJ28資訊網——每日最新資訊28at.com

public ShortUrlRandomSeed getAvailableSeed()  {  MachineInfo machineInfo = UrlConverUtil.getMachineInfo();  for (; ; ) {    // 獲取種子    ShortUrlRandomSeed seed = shortUrlSeedService.getAvailableSeed(machineInfo);    if (seed != null) {      int influenceNum = shortUrlSeedService.updateSeedStatus(seed.getId());      if (influenceNum > 0) {        return seed;      }    }  }}

這段代碼的作用是為了獲取一個種子用于短鏈的生成,在項目上線之初預生成了接近21w個種子,這個代碼在線上跑了3年了一直沒有問題,直到去年的某一天,21w個種子用光了,seed一直為null,開始死循環,最終導致CPU 100%6WJ28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-91012-0.html美團一面,你碰到過CPU 100%的情況嗎?你是怎么處理的?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 機械師 10 周年:科技致敬時光,旗艦 mini GTX 上市熱銷

下一篇: 分布式一致性必備:一文讀懂Raft算法

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品资源| 欧美高清在线播放| 亚洲一区二区不卡免费| 一个色综合av| 亚洲欧美日韩专区| 久久久人成影片一区二区三区观看| 久久综合色婷婷| 欧美人与性动交α欧美精品济南到| 国产精品国产馆在线真实露脸| 国产日韩欧美精品| 亚洲激情国产| 亚洲视频精品| 久久久国际精品| 欧美精品播放| 国产欧美日韩一区| 亚洲激情视频在线观看| 亚洲午夜精品久久| 久久九九国产精品怡红院| 欧美成人资源网| 国产精品视频成人| 亚洲黄一区二区三区| 亚洲欧美偷拍卡通变态| 蜜桃av噜噜一区| 国产精品欧美日韩一区二区| 在线日韩电影| 午夜精品电影| 欧美久久久久久久久久| 国产香蕉97碰碰久久人人| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲少妇一区| 久久亚洲精选| 国产精品色在线| 亚洲精品四区| 久久久久99精品国产片| 欧美午夜精品理论片a级按摩| 影音先锋亚洲视频| 亚洲欧美精品一区| 欧美激情一区二区三区在线| 国产中文一区| 亚洲一区二区免费视频| 欧美高清在线一区二区| 国产一区二区三区久久精品| 一区二区免费在线观看| 免费观看亚洲视频大全| 国产欧美一区视频| 亚洲视频在线观看| 欧美激情一区二区| 一区二区视频在线观看| 午夜亚洲视频| 欧美日韩一区二区免费视频| 亚洲国产另类 国产精品国产免费| 欧美一区二区三区成人| 欧美午夜不卡视频| 亚洲精选中文字幕| 免费欧美网站| 精品91免费| 欧美一区二区视频在线观看2020| 欧美午夜大胆人体| 亚洲裸体视频| 欧美77777| 国内外成人在线| 欧美一区二区三区精品电影| 国产精品wwwwww| 99riav久久精品riav| 久久中文精品| 国外成人在线视频| 欧美在线视频导航| 国产精品一区久久| 亚洲自拍16p| 国产精品igao视频网网址不卡日韩| 亚洲精品一区二区在线| 欧美二区乱c少妇| 亚洲高清av在线| 久久综合99re88久久爱| 激情视频亚洲| 久久久综合网| 一区二区自拍| 久久综合狠狠综合久久综青草| 国产在线观看一区| 久久九九国产精品| 国内精品视频久久| 久久久777| 精品69视频一区二区三区| 久久天天躁夜夜躁狠狠躁2022 | 欧美成人精品一区| 在线观看国产精品淫| 久久亚洲精品中文字幕冲田杏梨| 精品成人一区| 麻豆成人在线观看| 亚洲国产一区二区三区a毛片| 欧美成人精品不卡视频在线观看| 亚洲国产专区| 欧美电影免费观看网站| 日韩一二三区视频| 欧美视频成人| 午夜视频久久久| 国产午夜亚洲精品理论片色戒| 久久精品亚洲一区二区| 在线观看日韩精品| 欧美成人精品1314www| 亚洲精品日产精品乱码不卡| 欧美日韩亚洲视频| 亚洲影院免费| 国产性色一区二区| 久久久人成影片一区二区三区| 亚洲国产成人精品久久久国产成人一区 | 久久久久久久久久久久久女国产乱| 韩日在线一区| 欧美va亚洲va日韩∨a综合色| 亚洲美女中文字幕| 国产精品www994| 欧美中文在线观看国产| 又紧又大又爽精品一区二区| 欧美不卡视频一区| 宅男噜噜噜66一区二区| 国产精品亚洲第一区在线暖暖韩国| 欧美在线视频一区二区三区| 在线精品视频免费观看| 欧美日韩精品在线视频| 亚洲欧美日韩国产成人| 一区二区视频欧美| 欧美日韩国产在线| 羞羞答答国产精品www一本| 精品999久久久| 欧美日本韩国一区| 性xx色xx综合久久久xx| 亚洲激情另类| 国产精品三级视频| 另类激情亚洲| 亚洲视频在线二区| 一区视频在线| 欧美性大战久久久久| 久久久久久网址| 一区二区日韩精品| 黄页网站一区| 欧美婷婷六月丁香综合色| 久久久久久久久久久久久9999| 99re66热这里只有精品4| 国产亚洲精品久久飘花| 欧美成人精品在线视频| 亚洲欧美综合精品久久成人| 亚洲国产高清在线| 国产精品日韩在线播放| 欧美暴力喷水在线| 先锋资源久久| 亚洲乱码国产乱码精品精| 国产亚洲毛片| 欧美色视频一区| 久久躁日日躁aaaaxxxx| 亚洲欧美韩国| 日韩写真视频在线观看| 一区国产精品| 国产精品久久久久久影视| 麻豆成人在线播放| 性欧美精品高清| 99热这里只有成人精品国产| 伊大人香蕉综合8在线视| 国产精品久久久久久久久久尿| 欧美成人蜜桃| 久久久久久久久久久一区| 亚洲综合色激情五月| 亚洲美女av网站| 在线观看日韩欧美| 国产一区成人| 国产精品日韩久久久| 欧美日韩午夜在线| 欧美bbbxxxxx| 久久美女艺术照精彩视频福利播放| 亚洲免费在线观看视频| 99精品视频免费观看视频| 亚洲国产精品久久久久婷婷老年 | 亚洲福利国产| 国产一区二区三区电影在线观看| 欧美日韩在线视频首页| 欧美不卡视频| 久久天天综合| 久久精品国产免费| 欧美一级久久| 亚洲欧美综合精品久久成人| 一区二区三区视频在线看| 亚洲人精品午夜在线观看| 在线精品一区二区| 韩国免费一区| 国产综合亚洲精品一区二| 国产女主播在线一区二区| 国产精品久久久免费| 欧美日韩一区二区三区免费| 欧美精品91| 欧美—级a级欧美特级ar全黄| 免播放器亚洲一区| 免费久久99精品国产自在现线| 久久久噜久噜久久综合| 久久久亚洲国产美女国产盗摄| 欧美一区二区久久久| 久久99伊人| 性久久久久久久久久久久| 亚洲欧美三级伦理| 午夜精品一区二区三区四区| 亚洲欧美国产高清| 亚洲欧美日韩天堂| 午夜在线a亚洲v天堂网2018| 先锋影音久久久| 欧美在线free| 久久久久国产一区二区三区|