日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践

發(fā)布時(shí)間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Apache Dubbo是Alibaba開(kāi)源的高性能RPC框架,在國(guó)內(nèi)有非常多的用戶。

  • Github:https://github.com/apache/incubator-dubbo
  • 文檔:http://dubbo.incubator.apache.org/zh-cn/

Arthas是Alibaba開(kāi)源的應(yīng)用診斷利器,9月份開(kāi)源以來(lái),Github Star數(shù)三個(gè)月超過(guò)6000。

  • Github:https://github.com/alibaba/arthas
  • 文檔:https://alibaba.github.io/arthas/

當(dāng)Dubbo遇上Arthas,會(huì)碰撞出什么樣的火花呢?下面來(lái)分享Arthas排查Dubbo問(wèn)題的一些經(jīng)驗(yàn)。

dubbo-arthas-demo

下面的排查分享基于這個(gè)dubbo-arthas-demo,非常簡(jiǎn)單的一個(gè)應(yīng)用,瀏覽器請(qǐng)求從Spring MVC到Dubbo Client,再發(fā)送到Dubbo Server。

Demo里有兩個(gè)spring boot應(yīng)用,可以先啟動(dòng)server-demo,再啟動(dòng)client-demo。

  • https://github.com/hengyunabc/dubbo-arthas-demo

Client端:

Server端:

Arthas快速開(kāi)始

  • https://alibaba.github.io/arthas/install-detail.html

啟動(dòng)后,會(huì)列出所有的java進(jìn)程,選擇1,然后回車(chē),就會(huì)連接上ServerDemoApplication

Dubbo線上服務(wù)拋出異常,怎么獲取調(diào)用參數(shù)?

  • https://alibaba.github.io/arthas/watch.html

當(dāng)線上服務(wù)拋出異常時(shí),最著急的是什么參數(shù)導(dǎo)致了拋異常?

在demo里,訪問(wèn)http://localhost:8080/user/0,UserServiceImpl就會(huì)拋出一個(gè)異常,因?yàn)閡ser id不合法。

在Arthas里執(zhí)行 watch com.example.UserService * -e -x 2 '{params,throwExp}' ,然后再次訪問(wèn),就可以看到watch命令把參數(shù)和異常都打印出來(lái)了。

怎樣線上調(diào)試Dubbo服務(wù)代碼?

  • https://alibaba.github.io/arthas/redefine.html

在本地開(kāi)發(fā)時(shí),可能會(huì)用到熱部署工具,直接改代碼,不需要重啟應(yīng)用。但是在線上環(huán)境,有沒(méi)有辦法直接動(dòng)態(tài)調(diào)試代碼?比如增加日志。

在Arthas里,可以通過(guò)redefine命令來(lái)達(dá)到線上不重啟,動(dòng)態(tài)更新代碼的效果

比如我們修改下UserServiceImpl,用System.out打印出具體的User對(duì)象來(lái):

本地編繹后,把

server-demo/target/classes/com/example/UserServiceImpl.class

傳到線上服務(wù)器,然后用redefine命令來(lái)更新代碼:

這樣子更新成功之后,訪問(wèn) http://localhost:8080/user/1,在ServerDemoApplication的控制臺(tái)里就可以看到打印出了user信息。

怎樣動(dòng)態(tài)修改Dubbo的logger級(jí)別?

  • https://alibaba.github.io/arthas/ognl.html
  • https://alibaba.github.io/arthas/sc.html
  • https://commons.apache.org/proper/commons-ognl/language-guide.html

在排查問(wèn)題時(shí),需要查看到更多的信息,如果可以把logger級(jí)別修改為DEBUG,就非常有幫助。

ognl是apache開(kāi)源的一個(gè)輕量級(jí)表達(dá)式引擎。下面通過(guò)Arthas里的ognl命令來(lái)動(dòng)態(tài)修改logger級(jí)別。

首先獲取Dubbo里TraceFilter的一個(gè)logger對(duì)象,看下它的實(shí)現(xiàn)類,可以發(fā)現(xiàn)是log4j。

再用sc命令來(lái)查看具體從哪個(gè)jar包里加載的:

可以看到log4j是通過(guò)slf4j代理的。

那么通過(guò)org.slf4j.LoggerFactory獲取root logger,再修改它的level:

可以看到修改之后,root logger的level變?yōu)镈EBUG。

怎樣減少測(cè)試小姐姐重復(fù)發(fā)請(qǐng)求的麻煩?

  • https://alibaba.github.io/arthas/tt.html

在平時(shí)開(kāi)發(fā)時(shí),可能需要測(cè)試小姐姐發(fā)請(qǐng)求過(guò)來(lái)聯(lián)調(diào),但是我們?cè)赿ebug時(shí),可能不小心直接跳過(guò)去了。這樣子就尷尬了,需要測(cè)試小姐姐再發(fā)請(qǐng)求過(guò)來(lái)。

Arthas里提供了tt命令,可以減少這種麻煩,可以直接重放請(qǐng)求。

上面的tt -t命令捕獲到了3個(gè)請(qǐng)求。然后通過(guò)tt --play可以重放請(qǐng)求:

Dubbo運(yùn)行時(shí)有哪些Filter? 耗時(shí)是多少?

  • https://alibaba.github.io/arthas/trace.html

Dubbo運(yùn)行時(shí)會(huì)加載很多的Filter,那么一個(gè)請(qǐng)求會(huì)經(jīng)過(guò)哪些Filter處理,Filter里的耗時(shí)又是多少呢?

通過(guò)Arthas的trace命令,可以很方便地知道Filter的信息,可以看到詳細(xì)的調(diào)用棧和耗時(shí)。

Dubbo動(dòng)態(tài)代理是怎樣實(shí)現(xiàn)的?

  • https://alibaba.github.io/arthas/jad.html
  • com.alibaba.dubbo.common.bytecode.Wrapper

通過(guò)Arthas的jad命令,可以看到Dubbo通過(guò)javaassist動(dòng)態(tài)生成的Wrappr類的代碼:

獲取Spring context

除了上面介紹的一些排查技巧,下面分享一個(gè)獲取Spring Context,然后“為所欲為”的例子。

在Dubbo里有一個(gè)擴(kuò)展

com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory,把Spring Context保存到了里面。

因此,我們可以通過(guò)ognl命令獲取到。

  • SpringExtensionFactory@contexts.iterator.next 獲取到SpringExtensionFactory里保存的spring context對(duì)象
  • #context.getBean("userServiceImpl").findUser(1) 獲取到userServiceImpl再執(zhí)行一次調(diào)用

只要充分發(fā)揮想像力,組合Arthas里的各種命令,可以發(fā)揮出神奇的效果。

文章來(lái)源:https://dwz.cn/5Vjkc9hh

作者: 云棲社區(qū)

總結(jié)

以上是生活随笔為你收集整理的arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。