日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

發(fā)布時間:2023/12/10 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文適合有 Java 基礎(chǔ)知識的人群。

本文作者:HelloGitHub-秦人

HelloGitHub 推出的《講解開源項目》系列,今天給大家?guī)硪豢畎⒗镩_源的 Java 診斷利器 Arthas 項目—— Arthas

項目源碼地址:https://github.com/alibaba/arthas

一、簡介

為什么要用 Arthas?好多 Java 開發(fā)的小伙伴可能有遇到下面這些問題:

  • 項目中導(dǎo)入了一個 jar 包的不同版本,那么這個類從哪個 jar 包加載的?線上環(huán)境為什么會報各種異常?
  • 本地項目運(yùn)行沒問題,線上環(huán)境運(yùn)行的結(jié)果為什么和本地不同?數(shù)據(jù)原因沒有執(zhí)行到?代碼沒有 commit?環(huán)境上使用的分支搞不對?
  • 線上環(huán)境遇到偶先問題,難道只能通過加日志,調(diào)整項目日志級別,重新打包發(fā)布驗證問題嗎?
  • 線上環(huán)境遇到某個用戶的審批流程走的不對,線下環(huán)境無法重現(xiàn),怎么在線上進(jìn)行遠(yuǎn)程調(diào)試呢?
  • 有沒有一個監(jiān)控系統(tǒng)的運(yùn)行整體狀況的功能?
  • JDK 自帶了一些監(jiān)控工具,本地可動態(tài)監(jiān)控 JVM 運(yùn)行狀態(tài),那么線上環(huán)境有什么辦法可以監(jiān)控到 JVM 的實時運(yùn)行狀態(tài)?
  • 在線上環(huán)境怎么快速定位應(yīng)用的熱點,生成火焰圖?

1.1 實現(xiàn)原理

整體宏觀模塊調(diào)用圖如下:

1.2 主要功能

Arthas 提供的功能主要可以分為以下三個方面:

1 . 信息監(jiān)控

    • 進(jìn)程運(yùn)行基本信息包括:內(nèi)存、CPU占用、線程信息、線程堆棧、線程數(shù)統(tǒng)計、環(huán)境變量信息。
    • 對象信息:類對象靜態(tài)屬性、 Mbean 的屬性信息、已加載類信息、類加載器、類方法信息。

2 . 方法調(diào)用

    • 方法調(diào)用入?yún)ⅰ⒎祷刂挡榭础?/li>
    • 方法被調(diào)用的調(diào)用路徑、調(diào)用耗時、方法調(diào)用次數(shù)、成功次數(shù)、失敗次數(shù)等統(tǒng)計。
    • 記錄和重做方法調(diào)用。

3 . 類文件處理

    • dump 已加載類的字節(jié)碼、字節(jié)碼反編譯、類編譯、類重新熱加載。

二、安裝和使用

2.1 Linux 環(huán)境使用

登錄 Linux 環(huán)境,下載 arthas-boot.jar,然后使用命令 java -jar xxx.jar 直接運(yùn)行 jar 包。

下面兩個命令效果一樣,都可以下載。

curl -O https://alibaba.github.io/arthas/arthas-boot.jar wget https://alibaba.github.io/arthas/arthas-boot.jar

進(jìn)入 Arthas 第一步需要選擇項目

2.2 Docker 環(huán)境使用

進(jìn)入一個之前已經(jīng)啟動的 Docker 容器,這里我進(jìn)入了 tomcat7 容器。

docker ps -a #查看所有容器 docker cp arthas-boot.jar tomcat7:/home #拷貝 jar 到容器 home 目錄 docker exec -it tomcat7 bash #進(jìn)入名稱叫 tomcat7 的容器 cd /home java -jar arthas-boot.jar #運(yùn)行 jar 包

注意:選擇的 Docker 容器必須是以 JDK 為基礎(chǔ)依賴構(gòu)建的。

在命令行輸入 dashboard 就可以進(jìn)入儀表板的所有數(shù)據(jù)。

2.3 在開發(fā)工具 IntelliJ IDEA 使用

Cloud Toolkit 是一個 IDE 插件,幫助開發(fā)者更高效地開發(fā)、測試、診斷并部署應(yīng)用。方便地將本地應(yīng)用一鍵部署到任意機(jī)器,或 ECS、EDAS、Kubernetes。這里只介紹一下連接遠(yuǎn)程服務(wù)器,使用 Arthas。

2.3.1 安裝插件

在 File->Settings->Plugins 搜索 Alibaba Cloud Toolkit

插件安裝完重啟 IDEA。

2.3.2 使用工具

添加遠(yuǎn)程服務(wù)器,如下圖操作:

服務(wù)器配置成功后,選擇 More->Diagnostic 即可連接到服務(wù)器上。

2.3.3 運(yùn)行效果

三、實戰(zhàn)案例分析

以線上代碼熱更新,這里我寫了一個小的 Sprinboot 項目,主要就是一個獲取學(xué)習(xí)信息的接口。

@RestController public class StudentConroller {@GetMapping("getUserInfo")public Student getUserInfo() {return new Student("小劉",12,"西安市雁塔區(qū)");} }

通過 curl http://localhost:9000/getUserInfo,訪問內(nèi)容如下:

{"name":"小劉","id":12,"address":"西安市雁塔區(qū)"}

在服務(wù)運(yùn)行要測試的項目 demo-0.0.1-SNAPSHOT.jar

nohup java -jar demo-0.0.1-SNAPSHOT.jar & #后臺運(yùn)行 curl http://localhost:9000/getUserInfo #訪問接口

運(yùn)行 Arthas 主程序 arthas-boot.jar,選擇進(jìn)入demo-0.0.1-SNAPSHOT.jar

使用 jad 反編譯 StudentConroller.java 代碼

jad --source-only com.example.demo.controller.StudentConroller > /tmp/StudentConroller.java

打開 /tmp/StudentConroller.java 下的文件,修改反編繹出來的代碼,修改內(nèi)容如下:

@RestController public class StudentConroller {@GetMapping(value={"getUserInfo"})public Student getUserInfo() {return new Student("小劉1", 122, "西安市高新區(qū)");} }
  • sc 命令查找加載 StudentConroller 的 ClassLoader
    $ sc -d *StudentConroller | grep classLoaderHash
    classLoaderHash 2e0fa5d3
  • mc 命令內(nèi)存編繹代碼
    $ mc -c 2e0fa5d3 /tmp/StudentConroller.java -d /tmp
    Memory compiler output:/tmp/com/example/demo/arthas/user/controller/StudentConroller.class
    Affect(row-cnt:1) cost in 346 ms
  • redefine 命令熱更新代碼
    $ redefine /tmp/com/example/demo/controller/StudentConroller.class
    redefine success, size: 1
  • 檢測熱更新結(jié)果 再次訪問 curl http://localhost:9000/getUserInfo,顯示如下內(nèi)容:

用 Arthas 的 jad/mc/redefine 一條龍命令來線上熱更新代碼非常強(qiáng)大,但也很危險,要做好權(quán)限管理哦。

四、總結(jié)

本文開頭講 Arthas 有什么作用、我們?yōu)槭裁匆盟=又v了三種場景是如何使用 Arthas。最后以 Java 代碼在線熱部署為例,感受了 Arthas 的強(qiáng)大。看到這里我想你也對 Arthas 工具有了一個簡單的認(rèn)識。

現(xiàn)在的趨勢開發(fā)人員做了久了慢慢就變?yōu)?DevOps,了解更多的底層邏輯也能更好的反饋到代碼層面的上層建筑。

本文只能帶大家入門,Arthas 還有更多強(qiáng)大的功能等待你的發(fā)現(xiàn)!

五、附錄

  • Arthas 官方文檔
  • Arthas 腦圖—常用命令匯總

總結(jié)

以上是生活随笔為你收集整理的idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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