<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          new ArrayList 不當(dāng)導(dǎo)致 CPU 飆升。。

          共 4149字,需瀏覽 9分鐘

           ·

          2023-10-06 22:09

          往期熱門(mén)文章:

          
              
              

          1、假如Linus在中國(guó)···
          2、通過(guò) Arthas Trace 命令將接口性能優(yōu)化十倍
          3、一個(gè)由“ YYYY-MM-dd ”引發(fā)的慘案
          4、不要只盯著大廠,這20家中小廠我建議你也試試
          5、百萬(wàn)數(shù)據(jù)excel導(dǎo)出功能如何實(shí)現(xiàn)?

          文章來(lái)源:https://juejin.cn/post/7139202066362138654

          目錄

          • 前言

          • 當(dāng)時(shí)場(chǎng)景

          • 具體分析

          • 結(jié)束語(yǔ)


          前言


          昨天線上容器突然cpu飆升,也是第一次排查這種問(wèn)題所以記錄一下~

          首先問(wèn)題是這樣的,周五正在寫(xiě)文檔,突然收到了線上報(bào)警,發(fā)現(xiàn)cpu占用達(dá)到了90多,上平臺(tái)監(jiān)控系統(tǒng)查看容器,在jvm監(jiān)控中發(fā)現(xiàn)有一個(gè)pod在兩個(gè)小時(shí)內(nèi)產(chǎn)生了61次youngGc一次fullGc,這個(gè)問(wèn)題特別嚴(yán)重且少見(jiàn),由于我之前也沒(méi)有排查過(guò)此類(lèi)問(wèn)題,所以也是百度,但整個(gè)過(guò)程也有一些自己的思考,所以跟大家分享一下~


          當(dāng)時(shí)場(chǎng)景





          我先給大家看一下一副正常的gc曲線監(jiān)控(為保密性,我自己按照平臺(tái)監(jiān)控畫(huà)了出來(lái)):

          1.正常的jvm監(jiān)控曲線圖

          2.產(chǎn)生問(wèn)題的jvm監(jiān)控曲線圖

          可以看的出來(lái),正常情況下該系統(tǒng)很少gc(具體看業(yè)務(wù)系統(tǒng)使用情況、jvm內(nèi)存分配),但是在圖二中出現(xiàn)了大量異常的gc情況甚至觸發(fā)了fullGc,所以我當(dāng)時(shí)立馬進(jìn)行了分析。


          具體分析





          首先異常gc的情況只出現(xiàn)在一個(gè)pod上(系統(tǒng)有多個(gè)pod),在監(jiān)控系統(tǒng)找到對(duì)應(yīng)的pod,進(jìn)入pod內(nèi)部查看問(wèn)題原因,排查問(wèn)題一定要冷靜
          1. 進(jìn)入pod之后,輸入top查看各linux進(jìn)程對(duì)系統(tǒng)資源的使用情況(因我這是事后補(bǔ)稿,資源使用不高,大家看步驟即可)
          2. 分析資源使用情況在當(dāng)時(shí)的情況下, 當(dāng)時(shí)我的pid為1的進(jìn)程cpu上到了130(多核)那我認(rèn)定就是java應(yīng)用出問(wèn)題了,control+c退出繼續(xù)往下走
          3. 輸入top -H -p pid 通過(guò)此命令可以查看實(shí)際占用CPU最高的的線程的id,pid為剛才資源使用高的pid號(hào)
          4. 出現(xiàn)具體線程的資源使用情況,表格里的pid代表線程的id,我們稱(chēng)他為tid
          5. 我記得當(dāng)時(shí)的tip為746(上述圖片只是我給大家重復(fù)步驟),使用命令printf "%x\n" 746,將線程tid轉(zhuǎn)換為16進(jìn)制, 因?yàn)槲覀兙€程id號(hào)在堆棧里是16進(jìn)制的所以需要做一個(gè)進(jìn)制轉(zhuǎn)換
          6. 輸入jstack pid | grep 2ea >gc.stack 解釋一下,jstack是jdk給提供的監(jiān)控調(diào)優(yōu)小工具之一,jstack會(huì)生成JVM當(dāng)前時(shí)刻的線程快照,然后我們可以通過(guò)它查看某個(gè)Java進(jìn)程內(nèi)的線程堆棧信息,之后我們把堆棧信息通過(guò)管道收集2ea線程的信息,然后將信息生成為gc.stack文件,我隨便起的,隨意
          7. 當(dāng)時(shí)我先cat gc.stack 發(fā)現(xiàn)數(shù)據(jù)有點(diǎn)多在容器里看不方便,于是我下載到本地瀏覽,因?yàn)楣緦?duì)各個(gè)機(jī)器的訪問(wèn)做了限制,我只能用跳板機(jī)先找到一臺(tái)沒(méi)用的機(jī)器a,把文件下載到a然后我再把a(bǔ)里的文件下載到本地(本地訪問(wèn)跳板機(jī)OK),先輸入python -m SimpleHTTPServer 8080,linux自帶python,這個(gè)是開(kāi)啟一個(gè)簡(jiǎn)單http服務(wù)供外界訪問(wèn), 然后登錄跳板機(jī),使用curl下載curl -o http://ip地址/gcInfo.stack 為方便演示,我在圖中把ip換了一個(gè)假的 之后用同樣的方法從本地下載跳板機(jī)就可以了,記得關(guān)閉python開(kāi)啟的建議服務(wù)嗷
          8. 把文件下載到了本地,打開(kāi)查看編輯器搜索2ea,找到nid為2ea的堆棧信息, 之后找到對(duì)應(yīng)的impl根據(jù)行數(shù)分析程序
          9. 發(fā)現(xiàn)是在文件異步導(dǎo)出excel的時(shí)候,導(dǎo)出接口使用了公共列表查詢(xún)接口,列表接口查詢(xún)數(shù)據(jù)最多為分頁(yè)200一批,而導(dǎo)出數(shù)據(jù)量每個(gè)人的權(quán)限幾萬(wàn)到十幾萬(wàn)不等 并且該判斷方法使用了嵌套循環(huán)里判斷,且結(jié)合業(yè)務(wù)很容易get不到value,guawa下的newArrayList就是返回一個(gè)newArrayList(好像不用說(shuō)這么細(xì) (;一_一 ),在整個(gè)方法結(jié)束之前,產(chǎn)生的lists生命周期還在所以發(fā)生多次gc觸發(fā)重啟之后還影響到了別的pod。然后對(duì)代碼進(jìn)行了fix,緊急上線,問(wèn)題解決~


          結(jié)束語(yǔ)





          剛開(kāi)始遇到這個(gè)情況也是比較害怕,報(bào)警直接開(kāi)始循環(huán)了,自己也沒(méi)有遇到過(guò)這種問(wèn)題,經(jīng)過(guò)這次的經(jīng)歷,自我感覺(jué)處理的還好,遇到問(wèn)題先保證服務(wù)是否可用,如果所有pod都出現(xiàn)這個(gè)問(wèn)題是否需要擴(kuò)容pod或者重啟pod,還好這個(gè)只是一個(gè)pod出現(xiàn)了這個(gè)問(wèn)題,解決完心里也很開(kāi)心。當(dāng)時(shí)心理歷程就是我寧愿犯錯(cuò)也不愿什么都不做,太哈人了 = =,勤能補(bǔ)拙是良訓(xùn),繼續(xù)加油~
             
             
          往期熱門(mén)文章:

          1、為什么 Spring和IDEA 都不推薦使用 @Autowired 注解
          2、公司新來(lái)一個(gè)同事:為什么 HashMap 不能一邊遍歷一邊刪除?一下子把我問(wèn)懵了!
          3、緩存沒(méi)預(yù)熱,翻車(chē)了!
          4、Java反射和new效率對(duì)比,差距有多大?
          5、Java14 處理 NullPointerException 新方式,真的太香了!
          6、40 個(gè) SpringBoot 常用注解:讓生產(chǎn)力爆表!
          7、優(yōu)秀開(kāi)源軟件的類(lèi),都是怎么命名的?
          8、宇宙第一 IDE 放棄了 Mac。。。
          9、當(dāng)年很流行,現(xiàn)在已經(jīng)淘汰的Java技術(shù),請(qǐng)不要在繼續(xù)學(xué)了?。?!
          10、如何正確使用 ThreadLocal,你真的用對(duì)了嗎?

           
            

          瀏覽 3568
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码精品久久久 | 蜜臀av在线观看 午夜高清无码视频 | 性爱激情视频网站 | 99热精品88 | 97在线青娱乐 |