1、java agent是什麼?
—》對用戶透明,不侵入用戶業務代碼。讓java虛擬機加載agent jar
2、java agent有什麼用?
—>應用場景例如:調用鏈追蹤項目,在用戶無感知的情況下,記錄日誌。目前業內使用該技術的有,SkyWalking,Pinpoint(這個監控的粒度更小)
-各個 Java IDE 的調試功能,例如 eclipse、IntelliJ ;
-熱部署功能,例如 JRebel、XRebel、 spring-loaded;
-各種線上診斷工具,例如 Btrace、Greys,還有阿里的 Arthas;
-各種性能分析工具,例如 Visual VM、JConsole 等
3、java agent的實現原理?
https://zhuanlan.zhihu.com/p/147375268
4、 入門案例
4.1、 如何製造自己第一個java agent jar包
4.1.1、 第一步:我們需要一個插件來幫助我們生成帶特定格式的MAINIFEST.MF的jar
4.1.2、 第二步:在啟動項目的時候,在jvm參數中添加 -javaagent: *\ving-agent-0.0.1-SNAPSHOT.jar (在jvm上先加載agent包)
(偷偷地問)特定格式的MAINIFEST.MF是怎樣的?需要包括下面的內容
Manifest-Version: 1.0
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: cn.think.in.java.clazz.loader.asm.agent.PreMainTraceAgent
(再偷偷地問),難度每次都讓我手動去弄這個文件,我覺得很麻煩呀,有沒一個工具能幫我們將agent項目打包成包含MAINIFEST.MF的jar?
—–》對,你猜對了,真的有這個工具。那就是maven插件。(說到打包,肯定要想到maven或者gradle了吧)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifestEntries>
<Project-name>${project.name}</Project-name>
<Project-version>${project.version}</Project-version>
<Premain-Class>com.tuling.agent.Agent</Premain-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
<Boot-Class-Path>javassist-3.18.1-GA.jar</Boot-Class-Path>
</manifestEntries>
</archive>
<skip>true</skip>
</configuration>
</plugin>
插件
打包之後
測試
問題二:如果有一個類已經被虛擬機加載了,那麼我們的agent包裏面的邏輯就不能加載這個類。但是我就是想把這類替換掉,怎麼辦呢?(熱更新,虛擬機不停的情況下,替換成用戶最新的代碼)
插件
agent代碼的修改
重新打包
測試
問題三:
當JVM已裝置某個類,但是我們想重新走一次premain方法,我們怎樣做呢?
插件
修改agent代碼
打包
測試
思考
看到這裏,細心的朋友,可能會帶有疑問,我在實踐的時候,發現這個類的字節碼的生成並不簡單,如果讓我自己去手動去生成那就很麻煩呀?(麻煩–》複雜度高—》容易出錯—-》上線容易出問題—》那就直接不考慮該技術)
—-》為了解決這個問題,java-ssist就出現了。關於java-ssist,請點擊。
https://www.cnblogs.com/vingLiu/p/13193517.html
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※新北清潔公司,居家、辦公、裝潢細清專業服務
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※超省錢租車方案

漫長的充電時間為電動車推廣的一大問題,而美國電動汽車公司特斯拉(Tesla )在 1 年前公佈該公司的自動電池交換站(automated battery swap stations)的構想,終於將在下週與大家見面。 電動車漫長的充電時間,經常讓消費者卻步,Tesla 為了解決這個問題,乾脆讓電池用「換」的。特斯拉的官方部落格中公告,該公司將邀請位於美國舊金山以及洛杉磯的 Model S 使用者,參與測試他們的自動電池交換站。 在現場示範的影片中,電池交換過程使用了約花費 90 秒的時間,但特斯拉之後為 Model S 換上更堅固的鋁製偏轉板和鈦製底盤防護罩,兩者的組合將能有效防止電池刺穿或是由路面雜物所造成的危險情況,使得時間增加至 3 分鐘左右。 目前使用特斯拉的快速充電站(Supercharger)充電不收費,自動電池交換站需收費 60 至 80 美元,且前往更換電池之前須先預約。