自帶IDEA插件的阿里開(kāi)源診斷神器Arthas線上項(xiàng)目BUG調(diào)試
前言
記得之前寫(xiě)過(guò)一篇Arthas使用教程 ,通過(guò)使用Arthas我們既可以實(shí)現(xiàn)線上調(diào)試,還可以實(shí)現(xiàn)熱修復(fù)。最近逛了下Arthas的官網(wǎng),發(fā)現(xiàn)它已經(jīng)支持直接集成到SpringBoot應(yīng)用中去,并且還出了專(zhuān)用的IDEA插件。今天我們?cè)賮?lái)體驗(yàn)下它,看看它的功能是不是更強(qiáng)大了!
SpringBoot實(shí)戰(zhàn)電商項(xiàng)目mall(50k+star)地址:https://github.com/macrozheng/mall
Arthas簡(jiǎn)介
Arthas是Alibaba開(kāi)源的Java診斷利器,深受開(kāi)發(fā)者喜愛(ài),目前在Github上已有29K+Star。它采用命令行交互模式,同時(shí)提供豐富的 Tab 自動(dòng)補(bǔ)全功能,進(jìn)一步方便進(jìn)行問(wèn)題的定位和診斷。
ArthasTunnel
為了演示一個(gè)更加真實(shí)的線上環(huán)境,接下來(lái)我們將對(duì)Docker容器中的SpringBoot應(yīng)用進(jìn)行診斷。我們將使用ArthasTunnel
來(lái)實(shí)現(xiàn),ArthasTunnel
相當(dāng)于一個(gè)Web控制臺(tái),使用它我們無(wú)需進(jìn)入應(yīng)用容器即可對(duì)應(yīng)用進(jìn)行診斷,非常方便。
首先我們需要下載ArthasTunnel
的安裝包,下載地址:
https://github.com/alibaba/arthas/releases
由于官方只提供了JAR包,如果你想通過(guò)Docker方式啟動(dòng)的話,可以自行打包Docker鏡像,打包使用的Dockerfile腳本如下:
# 該鏡像需要依賴的基礎(chǔ)鏡像 FROM java:8 # 將當(dāng)前目錄下的jar包復(fù)制到docker容器的/目錄下 ADD arthas-tunnel-server.jar /arthas-tunnel-server.jar # 聲明服務(wù)運(yùn)行的端口 EXPOSE 8080 7777 # 指定docker容器啟動(dòng)時(shí)運(yùn)行jar包 ENTRYPOINT ["java", "-jar","/arthas-tunnel-server.jar"] # 指定維護(hù)者的名字 MAINTAINER macro
這里再提供一個(gè)一鍵打包運(yùn)行ArthasTunnel
容器的執(zhí)行腳本run.sh
,腳本內(nèi)容如下;
#!/usr/bin/env bash # 定義應(yīng)用組名 group_name='mall-tiny' # 定義應(yīng)用名稱 app_name='arthas-tunnel-server' # 定義應(yīng)用版本 app_version='1.0-SNAPSHOT' echo '----copy jar----' docker stop ${app_name} echo '----stop container----' docker rm ${app_name} echo '----rm container----' docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 打包編譯docker鏡像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' docker run -p 8080:8080 -p 7777:7777 --name ${app_name} \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/${app_name}/logs:/var/logs \ -d ${group_name}/${app_name}:${app_version} echo '----start container----'
接下來(lái)吧ArthasTunnel
的JAR包、Dockerfile文件、執(zhí)行腳本run.sh
上傳到Linux服務(wù)器上,然后使用./run.sh
命令運(yùn)行即可;
運(yùn)行成功后,可以直接訪問(wèn)ArthasTunnel
的Web控制臺(tái),訪問(wèn)地址:http://192.168.3.105:8080
SpringBoot集成
在SpringBoot應(yīng)用中直接集成Arthas并使用,無(wú)疑是最方便的,接下來(lái)我們將采用此種方法。
首先在項(xiàng)目的pom.xml
中添加如下依賴,可以對(duì)比下Arthas使用教程 中的使用方法,直接集成確實(shí)簡(jiǎn)單不少;
<!--集成Java診斷利器Arthas--> <dependency> <groupId>com.taobao.arthas</groupId> <artifactId>arthas-spring-boot-starter</artifactId> <version>3.6.1</version> </dependency>
然后修改配置文件application.yml
,記住這個(gè)agent-id
,ArthasTunnel
連接需要使用,由于我們將會(huì)把應(yīng)用容器通過(guò)--link
的方式連接到ArthasTunnel
容器,這里的tunnel-server
按下面進(jìn)行配置;
management: endpoints: web: exposure: # 暴露端點(diǎn)`/actuator/arthas` include: 'arthas' arthas: agent-id: mall-tiny-arthas tunnel-server: ws://arthas-tunnel-server:7777/ws
接下來(lái)通過(guò)之前的Dockerfile和run.sh
打包應(yīng)用,run.sh
與之前對(duì)比,只多了一行通過(guò)--link
連接到ArthasTunnel
容器的命令;
打包使用的Dockerfile和運(yùn)行腳本run.sh
都已經(jīng)包含在示例代碼中了,結(jié)構(gòu)如下;
接下來(lái)在ArthasTunnel
的Web控制臺(tái)中輸入AgentId
為mall-tiny-arthas
,并點(diǎn)擊Connect
按鈕即可開(kāi)始診斷Java應(yīng)用了;
比如通過(guò)dashboard
命令來(lái)顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,包括線程信息、JVM內(nèi)存信息及JVM運(yùn)行時(shí)參數(shù);
再比如說(shuō)使用thread
命令查看當(dāng)前線程信息,查看線程的堆棧,可以找出當(dāng)前最占CPU的線程;
當(dāng)然Arthas的功能非常強(qiáng)大,遠(yuǎn)不止這些,支持動(dòng)態(tài)修改日志和熱更新等,具體可以參考Arthas使用教程 。
IDEA插件
由于Arthas的功能很強(qiáng)大,需要記住的命令很多,有時(shí)候?qū)嵲谟洸蛔。谑怯辛诉@款I(lǐng)DEA插件,該插件主要用于幫助生成Arthas命令。
直接在IDEA的插件市場(chǎng)搜索arthas
即可找到該插件,然后點(diǎn)擊安裝即可;
安裝完成后我們來(lái)聊聊如何使用,比如當(dāng)我們覺(jué)得線上代碼和預(yù)期不一致,可以使用jad
命令反編譯下看看,直接選擇類(lèi),右鍵選擇Arthas命令然后選擇Jad反編譯;
此時(shí)將會(huì)直接把命令拷貝到剪切板,然后到ArthasTunnel
右鍵粘貼即可使用,比手打命令簡(jiǎn)單多了吧!
如果你想觀察方法執(zhí)行過(guò)程中的參數(shù)和返回值,可以使用watch
命令,選擇需要觀察的方法右鍵選擇即可;
這里觀察下Controller中的方法的執(zhí)行過(guò)程;
我們還可單獨(dú)修改某個(gè)類(lèi)的日志級(jí)別,選中類(lèi)名后右鍵選擇logger
命令;
先拷貝下logger sc
命令查看下當(dāng)前類(lèi)的日志級(jí)別為INFO
;
拷貝下ClassLoader的Hash值,這里由于在Linux中Ctrl+C
鍵有沖突,使用Ctrl+Insert
組合來(lái)拷貝;
接下來(lái)輸入ClassLoader的Hash值,修改下日志級(jí)別,然后拷貝修改日志級(jí)別的命令;
執(zhí)行完后再查看下日志級(jí)別,已經(jīng)被改為了DEBUG
級(jí)別
總結(jié)
今天體驗(yàn)了一把新版的Arthas,搭配ArthasTunnel和IDEA插件使用,確實(shí)非常方便!并且它還能和SpringBoot無(wú)縫集成,確實(shí)非常給力,更多Arthas的使用可以參考Arthas使用教程 。
參考資料
項(xiàng)目官網(wǎng):https://github.com/alibaba/arthas
官方文檔:https://arthas.aliyun.com/doc/index.html
DEA插件使用文檔:https://www.yuque.com/arthas-idea-plugin
項(xiàng)目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-arthas2
更多關(guān)于Arthas線上項(xiàng)目BUG調(diào)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
老生常談設(shè)計(jì)模式之動(dòng)態(tài)代理
下面小編就為大家?guī)?lái)一篇老生常談設(shè)計(jì)模式之動(dòng)態(tài)代理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06springboot+vue實(shí)現(xiàn)登錄功能
這篇文章主要為大家詳細(xì)介紹了springboot+vue實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05MyBatis?如何使項(xiàng)目兼容多種數(shù)據(jù)庫(kù)的解決方案
要想做兼容多種數(shù)據(jù)庫(kù),那毫無(wú)疑問(wèn),我們首先得明確我們要兼容哪些數(shù)據(jù)庫(kù),他們的數(shù)據(jù)庫(kù)產(chǎn)品名稱是什么,本次我們講解了一套使項(xiàng)目兼容多種數(shù)據(jù)庫(kù)的方案,對(duì)MyBatis項(xiàng)目兼容多種數(shù)據(jù)庫(kù)操作方法感興趣的朋友一起看看吧2024-05-05IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項(xiàng)目實(shí)現(xiàn)動(dòng)態(tài)登錄與注冊(cè)功能
這篇文章主要介紹了IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項(xiàng)目實(shí)現(xiàn)動(dòng)態(tài)登錄與注冊(cè)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Java中如何模擬HTTP請(qǐng)求并驗(yàn)證功能
要模擬HTTP請(qǐng)求并驗(yàn)證功能,你可以使用Spring Boot提供的MockMvc工具,它允許我們?cè)跊](méi)有實(shí)際啟動(dòng)HTTP服務(wù)器的情況下測(cè)試Spring MVC控制器,下面給大家分享如何模擬HTTP請(qǐng)求并驗(yàn)證功能,感興趣的朋友一起看看吧2024-05-05Java?如何通過(guò)注解實(shí)現(xiàn)接口輸出時(shí)數(shù)據(jù)脫敏
這篇文章主要介紹了Java?如何通過(guò)注解實(shí)現(xiàn)接口輸出時(shí)數(shù)據(jù)脫敏,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn)
在Maven項(xiàng)目中,可以使用Maven的插件來(lái)執(zhí)行Java程序,本文主要介紹了Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12Mybatis如何動(dòng)態(tài)創(chuàng)建表
這篇文章主要介紹了Mybatis如何動(dòng)態(tài)創(chuàng)建表問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果
這篇文章主要介紹了Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果,涉及Javafx操作系統(tǒng)文件模擬資源管理器的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09