最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

自帶IDEA插件的阿里開源診斷神器Arthas線上項(xiàng)目BUG調(diào)試

 更新時(shí)間:2022年06月20日 16:15:52   作者:MacroZheng  
這篇文章主要為大家介紹了自帶IDEA插件阿里開源診斷神器Arthas線上項(xiàng)目BUG調(diào)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

記得之前寫過一篇Arthas使用教程 ,通過使用Arthas我們既可以實(shí)現(xiàn)線上調(diào)試,還可以實(shí)現(xiàn)熱修復(fù)。最近逛了下Arthas的官網(wǎng),發(fā)現(xiàn)它已經(jīng)支持直接集成到SpringBoot應(yīng)用中去,并且還出了專用的IDEA插件。今天我們?cè)賮眢w驗(yàn)下它,看看它的功能是不是更強(qiáng)大了!

SpringBoot實(shí)戰(zhàn)電商項(xiàng)目mall(50k+star)地址:https://github.com/macrozheng/mall

Arthas簡介

Arthas是Alibaba開源的Java診斷利器,深受開發(fā)者喜愛,目前在Github上已有29K+Star。它采用命令行交互模式,同時(shí)提供豐富的 Tab 自動(dòng)補(bǔ)全功能,進(jìn)一步方便進(jìn)行問題的定位和診斷。

ArthasTunnel

為了演示一個(gè)更加真實(shí)的線上環(huán)境,接下來我們將對(duì)Docker容器中的SpringBoot應(yīng)用進(jìn)行診斷。我們將使用ArthasTunnel來實(shí)現(xiàn),ArthasTunnel相當(dāng)于一個(gè)Web控制臺(tái),使用它我們無需進(jìn)入應(yīng)用容器即可對(duì)應(yīng)用進(jìn)行診斷,非常方便。

首先我們需要下載ArthasTunnel的安裝包,下載地址:

https://github.com/alibaba/arthas/releases

由于官方只提供了JAR包,如果你想通過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----'

接下來吧ArthasTunnel的JAR包、Dockerfile文件、執(zhí)行腳本run.sh上傳到Linux服務(wù)器上,然后使用./run.sh命令運(yùn)行即可;

運(yùn)行成功后,可以直接訪問ArthasTunnel的Web控制臺(tái),訪問地址:http://192.168.3.105:8080

SpringBoot集成

在SpringBoot應(yīng)用中直接集成Arthas并使用,無疑是最方便的,接下來我們將采用此種方法。

首先在項(xiàng)目的pom.xml中添加如下依賴,可以對(duì)比下Arthas使用教程 中的使用方法,直接集成確實(shí)簡單不少;

<!--集成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)用容器通過--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

接下來通過之前的Dockerfile和run.sh打包應(yīng)用,run.sh與之前對(duì)比,只多了一行通過--link連接到ArthasTunnel容器的命令;

打包使用的Dockerfile和運(yùn)行腳本run.sh都已經(jīng)包含在示例代碼中了,結(jié)構(gòu)如下;

接下來在ArthasTunnel的Web控制臺(tái)中輸入AgentIdmall-tiny-arthas,并點(diǎn)擊Connect按鈕即可開始診斷Java應(yīng)用了;

比如通過dashboard命令來顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,包括線程信息、JVM內(nèi)存信息及JVM運(yùn)行時(shí)參數(shù);

再比如說使用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)擊安裝即可;

安裝完成后我們來聊聊如何使用,比如當(dāng)我們覺得線上代碼和預(yù)期不一致,可以使用jad命令反編譯下看看,直接選擇類,右鍵選擇Arthas命令然后選擇Jad反編譯;

此時(shí)將會(huì)直接把命令拷貝到剪切板,然后到ArthasTunnel右鍵粘貼即可使用,比手打命令簡單多了吧!

如果你想觀察方法執(zhí)行過程中的參數(shù)和返回值,可以使用watch命令,選擇需要觀察的方法右鍵選擇即可;

這里觀察下Controller中的方法的執(zhí)行過程;

我們還可單獨(dú)修改某個(gè)類的日志級(jí)別,選中類名后右鍵選擇logger命令;

先拷貝下logger sc命令查看下當(dāng)前類的日志級(jí)別為INFO;

拷貝下ClassLoader的Hash值,這里由于在Linux中Ctrl+C鍵有沖突,使用Ctrl+Insert組合來拷貝;

接下來輸入ClassLoader的Hash值,修改下日志級(jí)別,然后拷貝修改日志級(jí)別的命令;

執(zhí)行完后再查看下日志級(jí)別,已經(jīng)被改為了DEBUG級(jí)別

總結(jié)

今天體驗(yàn)了一把新版的Arthas,搭配ArthasTunnel和IDEA插件使用,確實(shí)非常方便!并且它還能和SpringBoot無縫集成,確實(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)文章

  • Java 讀取指定路徑的文本文件并返回String的方法

    Java 讀取指定路徑的文本文件并返回String的方法

    今天小編就為大家分享一篇Java 讀取指定路徑的文本文件并返回String的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解決mybatis plus字段為null或空字符串無法保存到數(shù)據(jù)庫的問題

    解決mybatis plus字段為null或空字符串無法保存到數(shù)據(jù)庫的問題

    這篇文章主要介紹了解決mybatis plus字段為null或空字符串無法保存到數(shù)據(jù)庫的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring通過@Lazy解決構(gòu)造方法形式的循環(huán)依賴問題

    Spring通過@Lazy解決構(gòu)造方法形式的循環(huán)依賴問題

    這篇文章主要給大家介紹了Spring如何通過@Lazy解決構(gòu)造方法形式的循環(huán)依賴問題,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)活工作有一定的幫助,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • Java 8 Stream 的終極技巧——Collectors 功能與操作方法詳解

    Java 8 Stream 的終極技巧——Collectors 功能與操作方法詳解

    這篇文章主要介紹了Java 8 Stream Collectors 功能與操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Java 8 Stream Collectors 功能、操作方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Java JDK 動(dòng)態(tài)代理的使用方法示例

    Java JDK 動(dòng)態(tài)代理的使用方法示例

    Java 動(dòng)態(tài)代理機(jī)制以巧妙的方式近乎完美地實(shí)踐了代理模式的設(shè)計(jì)理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動(dòng)態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • springboot?yml配置文件值注入方式

    springboot?yml配置文件值注入方式

    這篇文章主要介紹了springboot?yml配置文件值注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IntelliJ IDEA的build path設(shè)置方法

    IntelliJ IDEA的build path設(shè)置方法

    這篇文章主要介紹了IntelliJ IDEA的build path設(shè)置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java 根據(jù)網(wǎng)址查詢DNS/IP地址的方法

    Java 根據(jù)網(wǎng)址查詢DNS/IP地址的方法

    這篇文章主要介紹了Java 根據(jù)網(wǎng)址查詢DNS/IP地址的方法,具體實(shí)現(xiàn)代碼,大家參考下本文
    2017-12-12
  • 一文搞懂Java創(chuàng)建線程的五種方法

    一文搞懂Java創(chuàng)建線程的五種方法

    本文主要為大家詳細(xì)介紹一下Java實(shí)現(xiàn)線程創(chuàng)建的五種常見方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-06-06
  • Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法

    Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法

    本文主要介紹了Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評(píng)論

乌海市| 大邑县| 阳信县| 乐东| 台州市| 新巴尔虎右旗| 志丹县| 台中市| 双城市| 乌鲁木齐县| 万安县| 阿克陶县| 垦利县| 祁连县| 合水县| 东乌珠穆沁旗| 保亭| 安陆市| 台州市| 梁平县| 麻城市| 元江| 岳普湖县| 永宁县| 富裕县| 舞钢市| 中阳县| 钟祥市| 余庆县| 桃园市| 财经| 弥勒县| 青海省| 张家口市| 新安县| 韶山市| 吕梁市| 营口市| 嵊州市| 全椒县| 绍兴市|