溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Arthas線上項目BUG調試實例分析

發布時間:2022-06-21 09:29:33 來源:億速云 閱讀:245 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Arthas線上項目BUG調試實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Arthas線上項目BUG調試實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Arthas簡介

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

Arthas線上項目BUG調試實例分析

ArthasTunnel

為了演示一個更加真實的線上環境,接下來我們將對Docker容器中的SpringBoot應用進行診斷。我們將使用ArthasTunnel來實現,ArthasTunnel相當于一個Web控制臺,使用它我們無需進入應用容器即可對應用進行診斷,非常方便。

首先我們需要下載ArthasTunnel的安裝包

Arthas線上項目BUG調試實例分析

由于官方只提供了JAR包,如果你想通過Docker方式啟動的話,可以自行打包Docker鏡像,打包使用的Dockerfile腳本如下:

# 該鏡像需要依賴的基礎鏡像
FROM java:8
# 將當前目錄下的jar包復制到docker容器的/目錄下
ADD arthas-tunnel-server.jar /arthas-tunnel-server.jar
# 聲明服務運行的端口
EXPOSE 8080 7777
# 指定docker容器啟動時運行jar包
ENTRYPOINT ["java", "-jar","/arthas-tunnel-server.jar"]
# 指定維護者的名字
MAINTAINER macro

這里再提供一個一鍵打包運行ArthasTunnel容器的執行腳本run.sh,腳本內容如下;

#!/usr/bin/env bash
# 定義應用組名
group_name='mall-tiny'
# 定義應用名稱
app_name='arthas-tunnel-server'
# 定義應用版本
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文件、執行腳本run.sh上傳到Linux服務器上,然后使用./run.sh命令運行即可;

Arthas線上項目BUG調試實例分析

運行成功后,可以直接訪問ArthasTunnel的Web控制臺,訪問地址:http://192.168.3.105:8080

Arthas線上項目BUG調試實例分析

SpringBoot集成

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

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

<!--集成Java診斷利器Arthas-->
<dependency>
    <groupId>com.taobao.arthas</groupId>
    <artifactId>arthas-spring-boot-starter</artifactId>
    <version>3.6.1</version>
</dependency>

然后修改配置文件application.yml,記住這個agent-id,ArthasTunnel連接需要使用,由于我們將會把應用容器通過--link的方式連接到ArthasTunnel容器,這里的tunnel-server按下面進行配置;

management:
  endpoints:
    web:
      exposure:
        # 暴露端點`/actuator/arthas`
        include: 'arthas'
arthas:
  agent-id: mall-tiny-arthas
  tunnel-server: ws://arthas-tunnel-server:7777/ws

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

Arthas線上項目BUG調試實例分析

打包使用的Dockerfile和運行腳本run.sh都已經包含在示例代碼中了,結構如下;

Arthas線上項目BUG調試實例分析

接下來在ArthasTunnel的Web控制臺中輸入AgentIdmall-tiny-arthas,并點擊Connect按鈕即可開始診斷Java應用了;

Arthas線上項目BUG調試實例分析

比如通過dashboard命令來顯示當前系統的實時數據面板,包括線程信息、JVM內存信息及JVM運行時參數;

Arthas線上項目BUG調試實例分析

再比如說使用thread命令查看當前線程信息,查看線程的堆棧,可以找出當前最占CPU的線程;

Arthas線上項目BUG調試實例分析

當然Arthas的功能非常強大,遠不止這些,支持動態修改日志和熱更新等,具體可以參考Arthas使用教程 。

IDEA插件

由于Arthas的功能很強大,需要記住的命令很多,有時候實在記不住,于是有了這款IDEA插件,該插件主要用于幫助生成Arthas命令。

直接在IDEA的插件市場搜索arthas即可找到該插件,然后點擊安裝即可;

Arthas線上項目BUG調試實例分析

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

Arthas線上項目BUG調試實例分析

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

Arthas線上項目BUG調試實例分析

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

Arthas線上項目BUG調試實例分析

這里觀察下Controller中的方法的執行過程;

Arthas線上項目BUG調試實例分析

我們還可單獨修改某個類的日志級別,選中類名后右鍵選擇logger命令;

Arthas線上項目BUG調試實例分析

先拷貝下logger sc命令查看下當前類的日志級別為INFO;

Arthas線上項目BUG調試實例分析

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

Arthas線上項目BUG調試實例分析

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

Arthas線上項目BUG調試實例分析

執行完后再查看下日志級別,已經被改為了DEBUG級別

Arthas線上項目BUG調試實例分析

讀到這里,這篇“Arthas線上項目BUG調試實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女