欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

記一次多個Java Agent同時使用的類增強沖突問題及分析

摘要:Java Agent技術常被用于加載class文件之前進行攔截并修改字節(jié)碼,以實現(xiàn)對Java應用的無侵入式增強。

本文分享自華為云社區(qū)《記一次多個JavaAgent同時使用的類增強沖突問題及分析》,作者:Vansittart。

站在用戶的角度思考問題,與客戶深入溝通,找到華州網(wǎng)站設計與華州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋華州地區(qū)。

問題背景

Java Agent技術常被用于加載class文件之前進行攔截并修改字節(jié)碼,以實現(xiàn)對Java應用的無侵入式增強。Sermant是致力于服務治理領域的開源Java Agent框架項目。某客戶在集成Sermant之前已集成了兩套Java Agent:用于業(yè)務能力增強的自研Java Agent和用于鏈路采集的SkyWalking。該客戶單獨掛載自研Java Agent插件包時,字節(jié)碼增強可以按照預期生效。后期引入開源SkyWalking并同時將自研Java Agent插件包和SkyWalking通過-javaagent啟動參數(shù)掛載至業(yè)務應用中。使用過程中發(fā)現(xiàn),兩者的加載順序會對預期的攔截點增強生效與否有直接影響。為什么會產(chǎn)生這種現(xiàn)象?該客戶求助Sermant社區(qū)尋求解決多個JavaAgent的增強沖突問題,以避免類似典型問題再次出現(xiàn)以及順利集成Sermant用于業(yè)務的服務治理。

筆者嘗試從字節(jié)碼增強的底層邏輯的角度來分析該問題的癥結。

掛載多個JavaAgent的增強沖突問題

引入SkyWalking的初衷,是希望自研JavaAgent對業(yè)務的增強和SkyWalking的鏈路追蹤能力都能正常在業(yè)務應用上生效。-javaagent參數(shù)是支持多次執(zhí)行的,所以因此在啟動應用時在JAVA_TOOL_OPTIONS中加上了-javaagent:/xxx/my-agent.jar和-javaagent:/xxx/skywalking-agent.jar參數(shù)。

先加載自研JavaAgent后加載SkyWalking

在測試時首先把自研JavaAgent放在前面,SkyWalking放在后面, 即-javaagent:/xxx/my-agent.jar -javaagent:/xxx/SkyWalking-agent.jar。應用啟動前執(zhí)行的邏輯如下圖所示。按照參數(shù)的配置順序,應該是自研JavaAgent先對業(yè)務應用的jar包中字節(jié)碼進行增強,然后再由SkyWalking進行增強,最后再執(zhí)行業(yè)務應用的main()方法啟動應用。

然而啟動后發(fā)現(xiàn)日志中SkyWalking拋出java.lang.UnsupportedOperationException異常,該異常對應的目標類是com.google.common.eventbus.Dispatcher$LegacyAsyncDispatcher。自研JavaAgent無異常拋出。

ERROR 2022-09-27 15:32:09:546 main SkyWalkingAgent : index=0, batch=[class com.google.common.eventbus.Dispatcher$LegacyAsyncDispatcher], types=[class com.google.common.eventbus.Dispatcher$LegacyAsyncDispatcher] 
Caused by: java.lang.UnsupportedOperationException:class redefinition failed: attempted to change superclass or interfaces
at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.SkyWalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy$Dispatcher$ForJava6CapableVm.retransformClasses(AgentBuilder.java:6910)
...12 more

本文名稱:記一次多個Java Agent同時使用的類增強沖突問題及分析
網(wǎng)站網(wǎng)址:http://chinadenli.net/article20/dsoioco.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、外貿(mào)建站ChatGPT、關鍵詞優(yōu)化網(wǎng)站維護、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設