<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      線上問題排查神器 Arthas

      之前介紹過 BTrace,線上問題排查神器 BTrace 的使用
      <https://mp.weixin.qq.com/s/4vYFLVJWufJyNNuWrmDT2A>
      ,也說它是線上問題排查神器。都是神器,但今天這個也很厲害,是不是更厲害不好說,但是使用起來非常簡單。如果你用 BTrace
      的話,需要事先寫好探測腳本,然后上傳到需要排查問題的服務器,然后執(zhí)行命令。比方說獲取某個方法的參數(shù)、返回值、異常等。而 Athas
      方便在不用寫腳本,直接用命令行方式就可以,使用它就好像在用安裝在服務器上的各種工具一樣,比如 top、jps、jmap 等。

      他們背后的邏輯都是字節(jié)碼修改,如果你想了解,可以讀一讀這篇Java 調(diào)試工具、熱部署、JVM 監(jiān)控工具都用到了它
      <https://mp.weixin.qq.com/s/9xn9Ht4WO0Et_V7ZclsX_Q>

      夸了半天,Arthas 到底有什么神奇的呢,有什么功效呢。以下是摘自官方的介紹。

      Arthas 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。

      當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

      這個類從哪個 jar 包加載的?

      為什么會報各種類相關(guān)的 Exception?

      我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?

      遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?

      線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!

      是否有一個全局視角來查看系統(tǒng)的運行狀況?

      有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?

      Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同時提供豐富的 Tab
      自動補全功能,進一步方便進行問題的定位和診斷。

      看到上面的介紹是不是有種發(fā)現(xiàn)新大陸的感覺,恨不得拍拍大腿。心里在想,要是早知道它,之前就不用為了一個詭異的線上 bug 重復發(fā)包打日志了。

      不管你現(xiàn)在用不用得上,都請記住它吧,相信我,遲早會用的上的。

      安裝與啟動

      先遠程到目標服務器上,然后執(zhí)行以下命令安裝并運行
      wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
      然后 Arthas 會列出當前服務器上的所有 Java 進程。
      Arthas fengzheng$ java -jar arthas-boot.jar [INFO] arthas-boot version: 3.1.1
      [INFO] Found existing java process, please choose one and hit RETURN. * [1]:
      95301 org.kite.CmApplication [2]: 95300 org.jetbrains.jps.cmdline.Launcher [3]:
      87737 org.kite.WdApplication
      比如你想檢查 org.kite.WdApplication 這個應用的問題,那么輸入數(shù)字 3 回車,會出現(xiàn)如下提示,并開始正式與目標應用交互。


      正式交互開始,就到了大展拳腳的時候了,線上出現(xiàn)的問題基本上都可以找到合適的命令。

      下面簡單的介紹幾個,就是為了演示一下使用方式。

      monitor
      ## 監(jiān)控 MonitorController 類下的 overview 方法 monitor -c 5
      kite.springcloud.jxm.controller.MonitorController overview ## 監(jiān)控
      kite.springcloud.jxm.service package 下所有了類的所有方法 *是通配符 也可以是正則表達式 monitor -c 60
      kite.springcloud.jxm.service.* *
      -c 為執(zhí)行周期,默認120 秒,例如 -c 5 表示 5 秒鐘輸出一次,-c 60 表示 60 秒輸出一次。

      watch
      ## 方法執(zhí)行前 打印參數(shù) watch kite.springcloud.jxm.service.MonitorDashboardService
      buildJvmInfo "{params}" -b -n 1 ## 方法返回后 打印返回值 watch
      kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{returnObj}"
      -s -n 1 ## 方法返回后 打印所在的 ClassLoader、所在的類、調(diào)用實例 watch
      kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo
      "{loader,clazz,target}" -s -n 1 ## 打印耗時超過 200ms 方法的參數(shù)和返回值 watch
      kite.springcloud.jxm.service.MonitorDashboardService * '{params, returnObj}'
      '#cost>200'
      trace

      方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個節(jié)點上耗時
      trace kite.springcloud.jxm.controller.MonitorController overview # 多個類
      模擬實現(xiàn)多穿鏈路 trace trace -E
      kite.springcloud.jxm.controller.MonitorController|kite.springcloud.jxm.service.MonitorDashboardService
      overview
      stack

      輸出當前方法被調(diào)用的調(diào)用路徑
      stack kite.springcloud.jxm.controller.MonitorController overview stack
      kite.springcloud.jxm.service.MonitorDashboardService overview -n 1
      詳細的命令介紹直接看官方文檔 <https://alibaba.github.io/arthas/quick-start.html>吧 。

      另外,無論是 Arthas 還是 BTrace
      ,都是用來排查單機服務問題的,也就是應用內(nèi)部的代碼、性能問題,如果要排查不同服務之間的調(diào)用問題,那就是另一個維度上的事兒了。就需要 APM 的幫助了。

      不要吝惜你的「推薦」呦

      歡迎關(guān)注,不定期更新本系列和其他文章
      古時的風箏 ,進入公眾號可以加入交流群

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          日韩免费黄色电影网站 | 男女免费在线视频 | 在线免费看成人片 | 最好看的日本中文字幕2021 | 亚洲lesbianxxxxhd | 全部孕妇毛片丰满孕妇 | 青青草天堂 | 国产小姐操逼视频 | 一级A片处破女免费 | 爆乳影音先锋 |