<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>

          面試官:線上服務(wù)不可用,怎么排查?

          共 1710字,需瀏覽 4分鐘

           ·

          2021-10-17 14:03

          程序員的成長(zhǎng)之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。

          來(lái)自:https://urlify.cn/Q3Ar6z

          下面是線上機(jī)器的cpu使用率,可以看到從4月8日開(kāi)始,隨著時(shí)間cpu使用率在逐步增高,最終使用率達(dá)到100%導(dǎo)致線上服務(wù)不可用,后面重啟了機(jī)器后恢復(fù)。

          1、排查思路

          簡(jiǎn)單分析下可能出問(wèn)題的地方,分為5個(gè)方向:
          • 系統(tǒng)本身代碼問(wèn)題
          • 內(nèi)部下游系統(tǒng)的問(wèn)題導(dǎo)致的雪崩效應(yīng)
          • 上游系統(tǒng)調(diào)用量突增
          • http請(qǐng)求第三方的問(wèn)題
          • 機(jī)器本身的問(wèn)題

          2、開(kāi)始排查

          1. 查看日志,沒(méi)有發(fā)現(xiàn)集中的錯(cuò)誤日志,初步排除代碼邏輯處理錯(cuò)誤。
          2. 首先聯(lián)系了內(nèi)部下游系統(tǒng)觀察了他們的監(jiān)控,發(fā)現(xiàn)一起正常。可以排除下游系統(tǒng)故障對(duì)我們的影響。
          3. 查看provider接口的調(diào)用量,對(duì)比7天沒(méi)有突增,排除業(yè)務(wù)方調(diào)用量的問(wèn)題。
          4. 查看tcp監(jiān)控,TCP狀態(tài)正常,可以排除是http請(qǐng)求第三方超時(shí)帶來(lái)的問(wèn)題。
          5. 查看機(jī)器監(jiān)控,6臺(tái)機(jī)器cpu都在上升,每個(gè)機(jī)器情況一樣。排除機(jī)器故障問(wèn)題。即通過(guò)上述方法沒(méi)有直接定位到問(wèn)題。

          3、解決方案

          1、重啟了6臺(tái)中問(wèn)題比較嚴(yán)重的5臺(tái)機(jī)器,先恢復(fù)業(yè)務(wù)。保留一臺(tái)現(xiàn)場(chǎng),用來(lái)分析問(wèn)題。
          2、查看當(dāng)前的tomcat線程pid。
          3、查看該pid下線程對(duì)應(yīng)的系統(tǒng)占用情況。top -Hp 384
          4、發(fā)現(xiàn)pid?4430?4431?4432?4433?線程分別占用了約40%的cpu
          5、將這幾個(gè)pid轉(zhuǎn)為16進(jìn)制,分別為114e?114f?1150?1151
          6、下載當(dāng)前的java線程棧?sudo -u tomcat jstack -l 384>/1.txt
          7、查詢5中對(duì)應(yīng)的線程情況,發(fā)現(xiàn)都是gc線程導(dǎo)致的
          8、dump java堆數(shù)據(jù)
          sudo -u tomcat jmap -dump:live,format=b,file=/dump201612271310.dat 384
          9、使用MAT加載堆文件,可以看到j(luò)avax.crypto.JceSecurity對(duì)象占用了95%的內(nèi)存空間,初步定位到問(wèn)題。
          MAT下載地址:
          http://www.eclipse.org/mat/
          10、查看類(lèi)的引用樹(shù),看到BouncyCastleProvider對(duì)象持有過(guò)多。即我們代碼中對(duì)該對(duì)象的處理方式是錯(cuò)誤的,定位到問(wèn)題。

          4、代碼分析

          我們代碼中有一塊是這樣寫(xiě)的
          這是加解密的功能,每次運(yùn)行加解密都會(huì)new一個(gè)BouncyCastleProvider對(duì)象,放倒Cipher.getInstance()方法中。
          看下Cipher.getInstance()的實(shí)現(xiàn),這是jdk的底層代碼實(shí)現(xiàn),追蹤到JceSecurity類(lèi)中
          verifyingProviders每次put后都會(huì)remove,verificationResults只會(huì)put,不會(huì)remove.

          看到verificationResults是一個(gè)static的map,即屬于JceSecurity類(lèi)的。所以每次運(yùn)行到加解密都會(huì)向這個(gè)map put一個(gè)對(duì)象,而這個(gè)map屬于類(lèi)的維度,所以不會(huì)被GC回收。這就導(dǎo)致了大量的new的對(duì)象不被回收。

          5、代碼改進(jìn)

          將有問(wèn)題的對(duì)象置為static,每個(gè)類(lèi)持有一個(gè),不會(huì)多次新建。

          6、本文總結(jié)

          遇到線上問(wèn)題不要慌,首先確認(rèn)排查問(wèn)題的思路:
          1. 查看日志
          2. 查看CPU情況
          3. 查看TCP情況
          4. 查看java線程,jstack
          5. 查看java堆,jmap
          6. 通過(guò)MAT分析堆文件,尋找無(wú)法被回收的對(duì)象

          推薦閱讀:

          一行命令堆出你的新垣結(jié)衣(已開(kāi)源),有點(diǎn)牛!

          最牛逼 Java 日志框架 — Log4j2,性能無(wú)敵,橫掃對(duì)手.....

          最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)個(gè)「在看」,點(diǎn)擊上方小卡片,進(jìn)入公眾號(hào)后回復(fù)「面試題」領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          朕已閱?

          瀏覽 45
          點(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>
                  又黄又爽网站 | 久久久免费三级片网站 | 4438成人网丁香五月五月天 | 啪啪视频免费看 | 一区二区三区性爱视频 |