精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

性能優化那些事兒(三)

原創 精選
開發 開發工具
在討論完性能優化的方面和策略之后,這次我們的文章更偏向技術層面,來分享下如何開發一個自己的性能分析工具(基于JVM)。

接上文:

在討論完性能優化的方面和策略之后,這次我們的文章更偏向技術層面,來分享下如何開發一個自己的性能分析工具(基于JVM)。

『新』知識

考慮到咱們大多數還是開發業務為主,所以Java里面一些『鮮為人知』的API可能很多人都不知道,這里就簡單介紹一番,如果想深究的,就自己谷歌一下吧。

  • JVMTI(JVM Tool Interface)是 Java 虛擬機所提供的 native 編程接口,即底層的相關調試接口調用,我們熟知的Java調試其實也是基于它。
  • Instrumentation,雖然Java提供了JVMTI,但是對應的agent需要用C/C++開發,對Java開發者而言并不是非常友好。因此在Java SE 5的新特性中加入了Instrumentation機制。有了Instrumentation,開發者可以構建一個基于Java編寫的Agent來監控或者操作JVM了,比如替換或者修改某些類的定義等。

有了上面兩個知識,其實我們就可以開發一個簡單的Agent了,Instrumentation可以理解為JVM層面的AOP(Aspect Oriented Programming),通過應用啟動時掛載Agent,我們可以對每一個class字節碼進行查看和修改。

  • ASM ASM是一種通用Java字節碼操作和分析框架,它可以用于修改現有的class文件或動態生成class文件,結合Instrumentation我們可以做到掛載Agent的時候,對字節碼進行修改,加上我們需要的性能監控手段。ASM的學習是有難度的,需要對字節碼有所了解,但由于其性能優秀,被各種工具作為修改字節碼的首選,比如大家熟悉的Cglib。
  • Javassist 依舊是一個字節碼的修改工具,但對初學者更加友好,不需要過多了解字節碼層面,可以書寫Java語法片段對已有class字節進行修改,缺點是過于模板化,難以優化,并且功能有限。我們做性能分析工具,本身是要盡可能減少插入字節碼對現有代碼的影響,并且注入的速度也要盡可能快,所以一般都會選擇ASM作為首選項。

好了,介紹完Instrumentation和ASM,我們是不是就可以滿足制作性能分析工具的前提條件了呢?你看我們通過Instrumentation進行JVM層面的AOP,再通過ASM對JAVA的字節碼進行修改,就可以著手完成性能分析最重要的埋點環節了。

看起來沒有錯,但是誰也不希望我們增強修改過的代碼一直存在內存中,分析一次就對環境造成不可逆的破壞吧。Instrumentation可以通過addTransformer添加字節碼轉換器,也可以將字節碼恢復原樣(只需要removeTransformer再retransformClasses就可以恢復了),但javaAgent畢竟是個單獨的jar包,它也會有一些依賴,將其加載進來必然會引發新的Class加載甚至是Class的沖突。那么新的問題就出來了,javaAgent如何不對現有的類有影響呢?

ClassLoader 類加載器,我們可以采用一個新的類加載器,專門加載javaAgent里面的類庫,這樣就可以解決agent的類引發沖突的問題,在舊版本JDK中我們很難對ClassLoader做卸載,并且類的卸載是很麻煩的事情,限制很多,好在我們現在多數用的都是jdk1.8,只要遵循類卸載的規則,對ClassLoader進行清理還是很輕松的。

額外的類加載器實現了業務代碼和Agent代碼類的隔離,使它們可以安全引用包,并且可以對Agent的類進行卸載,但這樣同時引入了一個新的問題。類是隔離的,我在對業務代碼進行增強時,如何向agent代碼傳遞信息?增強的代碼一定是被加載在AppClassLoader里,如何與AgentClassLoader進行通訊呢?

BootStrapClassLoader 啟動類加載器,該ClassLoader是JVM在啟動時創建的,理解這一部分知識,就一定要理解ClassLoader的雙親委派機制。我們可以創建一個非常簡單的Spy類和一個SpyHandler接口,Spy類定義好一些靜態方法用于代碼增強時調用,而SpyHandler則是定義一些用于通訊傳參的接口。我們將這兩個類打成jar包,并通過Instrumentation的appendToBootstrapClassLoaderSearch接口,在agent加載時引入BootStrapClassLoader類中,這樣我們在各個ClassLoader中都能訪問Spy類和SpyHandler接口了。

通過上面的介紹,我們現在可以動手做一個自己的APM工具了,通過Instrumentation+ASM,我們可以實現Class文件的修改增強,甚至可以修改JDK自帶的類比如String,通過自定義的ClassLoader我們可以隔離Agent的類和業務的類,通過打入BootStrap的Spy,我們可以實現跨ClassLoader之間的通訊。

萬事俱備,我們現在可以開始動手實現一個自己的APM工具了吧!

打住,其實上面這些功能不需要自己一一實現,我們不需要重復制造輪子,來自阿里開源項目JVM-SANDBOX此時華麗登場。這個項目屏蔽了ASM難以使用的缺點,也簡化了Instrumentation打樁過程,并且實現了ClassLoader的隔離,也有了BootStrapClassLoader中的Spy類,我們在此框架的基礎上進行開發更為簡單。

原圖鏈接:https://github.com/alibaba/jvm-sandbox/wiki/img/jvm-sandbox-classloader.png

集『大』成

我們擁有了JVM-SANDBOX這一利器,似乎節約了我們很多的時間,我們現在終于可以著手性能分析了。

那么怎么進行性能分析呢?

  • Zipkin,開源的鏈路追蹤。
  • Jaeger,開源的鏈路追蹤支持Zipkin協議,個人感覺更為好用。

我們可以引入Zipkin或者Jaeger作為收集者和UI展現,根據自己的喜好選擇一個好用的開源工具。通過sandbox提供的功能,我們可以很方便編寫埋點代碼,將我們的鏈路追蹤工具集成到Agent里面,最終實現無侵入的定制化鏈路追蹤。

通過集成ZipkinClient或者JaegerClient我們可以進行埋點收集,我們似乎把一些功能以搭積木的方式組裝起來,解決了一個頗為復雜的實現,這就是開源的魅力所在。其實在實際的過程中我們還遇到了一些困難,比如如何追蹤異步調用,如何追蹤跨線程的調用,如何處理線程池,如何處理ForkJoin?

其中最為復雜的是如何處理那些跨線程的派發,我們如何將鏈路的上下文在多個線程中傳遞。JDK的InheritableThreadLocal類可以完成父線程到子線程的值傳遞。但對于使用線程池等會池化復用線程的執行組件的情況,線程由線程池創建好,并且線程是池化起來反復使用的;這時父子線程關系的ThreadLocal值傳遞已經沒有意義,應用需要的實際上是把 任務提交給線程池時的ThreadLocal值傳遞到任務執行時。

說起來可能不好理解,總得來說無論是ThreadLocal還是InheritableThreadLocal都無法處理線程池或者ForkJoin帶來的線程復用的副作用,即無法有效準確安全的傳遞鏈路的上下文,不信大家可以試一試。

那么怎么解決這個問題呢?沒錯,就是修改JDK源碼,讓線程池在進行調度的時候具有安全準確傳遞上下文信息的能力,比如對Runnable和Callable接口進行增強處理,讓其可以攜帶線程的上下文。如果要對JDK的代碼進行增強,我們需要非常熟悉線程調度、線程池、Forkjoin的源碼,還需要小心處理值的傳遞確保安全,聽起來就很危險,也很困難。不用擔心我們不是第一次遇到這種問題的人,我們再次搬來了阿里的開源產品TTL,這個庫解決的就是上面描述的問題。

但是找到開源產品也并不一定能解決所有的問題,transmittable-thread-local雖然能夠解決線程復用時傳值的問題,但是它的實現對JDK代碼進行了『過分』的修改,以至于Instrumentation不能進行動態增強,它需要在啟動時未加載到ClassLoader的時候對JDK的源碼進行增強,并不能對已加載的JDK源碼進行動態增強,也就是說這種增強只能發生在一開始,不能發生在中間時間,且不可卸載。

這是因為Instrumentation的redefineClasses這個方法存在限制:重定義不得添加、移除、重命名字段或方法;不得更改方法簽名、繼承關系(不然那些商業的熱重載技術怎么賺錢。。)。而TTL的增強違反了這個原則,我們需要對其修改,并集成到Agent中。這個改造比較無趣也不好解說,可以直接看改造后的JVM-SANDBOX,我們為了后續使用方便,將TTL庫直接用BootStrapClassLoader加載了進去。

開源

最終開源的性能分析工具可以在這里找到:https://github.com/tmtbe/PVisualization,配合改造后的JVM-SANDBOX,可以實現360度無死角的性能鏈路追蹤分析,開發埋點也非常便捷,也無需考慮任何線程池的問題。

原圖鏈接:https://github.com/tmtbe/PVisualization/raw/master/source/img.png

責任編輯:趙寧寧 來源: Thoughtworks洞見
相關推薦

2022-02-18 19:24:15

性能優化代碼

2022-04-08 09:47:55

性能優化開發

2013-03-12 17:33:17

Linux系統性能調優

2022-06-20 05:40:25

數據庫MySQL查詢

2021-06-09 13:28:40

密碼安全身份認證數據安全

2013-12-26 14:23:03

定位系統GPS監測

2022-02-08 17:39:04

MySQL服務器存儲

2011-02-25 14:35:00

2018-09-26 06:50:19

2021-06-02 08:33:31

TPCTPC-H系統

2022-02-09 17:08:57

卡頓App 流暢性用戶

2012-07-31 09:14:20

蘋果三星

2021-04-29 10:30:58

MySQL數據遷移

2019-11-20 10:00:56

開源侵權版權

2013-09-09 10:54:24

2021-03-18 09:01:53

軟件開發軟件選型

2024-08-12 08:41:40

2024-11-18 15:30:53

Linux目錄權限

2022-12-25 10:47:52

2023-04-11 07:34:40

分布式系統算法
點贊
收藏

51CTO技術棧公眾號

精品91一区二区三区| 国产精品九九久久久久久久| 又黄又爽又色的视频| 91高清在线观看视频| 成人午夜av影视| 91sa在线看| 国产午夜福利一区| 日韩三级网址| 色妞www精品视频| 黄色www在线观看| 天天操天天干天天爽| 日本成人中文字幕在线视频| 欧美福利小视频| 一色道久久88加勒比一| 亚洲精品午夜| 欧美日韩日日骚| 男人日女人bb视频| 久久久久久久久免费视频| 99精品国产热久久91蜜凸| 成人免费在线视频网址| www欧美在线| 外国成人激情视频| 国产香蕉精品视频一区二区三区| 麻豆传媒在线看| 丝袜老师在线| 亚洲精品你懂的| 久久婷婷国产综合尤物精品| av老司机久久| 日韩av在线播放中文字幕| 久久久久久91香蕉国产| 国产精品18在线| 亚洲三级网页| 日韩欧美123| 欧美丝袜在线观看| 人人视频精品| 亚洲va韩国va欧美va| 国产精品8888| 日韩欧美小视频| 欧美激情综合网| 欧美一级爱爱| 日韩av资源站| av不卡免费电影| 国产日韩欧美二区| 免费看av毛片| 成人在线视频一区| 91久久久一线二线三线品牌| 91 中文字幕| 久久精品99久久久| 国产精品三级久久久久久电影| 亚洲天堂视频网站| 久久九九电影| 国产成人97精品免费看片| 国产做受高潮漫动| 亚洲大胆视频| 97视频在线观看免费| 亚洲一区 视频| 日韩一级免费| 青青草一区二区| 精产国品一区二区| 视频一区二区三区入口| 国产福利精品av综合导导航| 国产99久久久久久免费看| 久久一综合视频| 国产精品久久视频| 一本色道久久综合亚洲| 精品一区二区三区欧美| 亚洲va久久久噜噜噜| 国产成人毛毛毛片| 成人性色生活片| 精品无人区一区二区三区 | 日本在线免费播放| 国产精品护士白丝一区av| 超碰免费在线公开| 四虎亚洲成人| 精品女同一区二区三区在线播放 | 亚洲精品久久久久久国| 999视频精品| 欧美疯狂xxxx大交乱88av| 中文字幕一区二区三区手机版 | 97国产精品人人爽人人做| 日韩av男人天堂| 久久久久国产一区二区| 国产日韩精品入口| 国产成人精品亚洲精品色欲| 成人国产在线观看| 日韩福利在线| 最爽无遮挡行房视频在线| 午夜欧美视频在线观看| 日本激情视频在线| 成人亚洲精品| 精品小视频在线| 性生交大片免费全黄| 亚洲第一黄色| 国产欧美婷婷中文| 欧美77777| 欧美国产97人人爽人人喊| 国产欧美123| 天天免费亚洲黑人免费| 日韩一区二区三区视频在线| 中文字幕一区二区久久人妻网站| 日本久久一二三四| 国内揄拍国内精品少妇国语| 免费视频网站在线观看入口| 国产剧情一区二区三区| 日韩av在线电影观看| 日韩伦理电影网站| 在线观看91视频| 欧美丰满熟妇bbb久久久| 欧美精品一二| 98视频在线噜噜噜国产| 91av国产精品| 国产欧美日韩综合精品一区二区| 国产美女主播在线| 色综合一区二区日本韩国亚洲 | 永久免费网站在线| 在线亚洲高清视频| 国产原创剧情av| 亚洲精品成人影院| 国产精品一区电影| 秋霞av在线| 亚洲动漫第一页| 欧美一级小视频| 日本大胆欧美| 国产精品扒开腿做爽爽爽的视频| 好吊色在线观看| 综合久久综合久久| 久久久久久久久久久久91| 老司机aⅴ在线精品导航| 欧美成人网在线| 国产又粗又猛又爽又黄视频 | 国产在线精品一区二区不卡了| 欧美伦理一区二区| 国产福利电影在线播放| 日韩你懂的电影在线观看| 中文字幕美女视频| 日本欧美一区二区三区| 日本一区二区三区精品视频| 自由日本语热亚洲人| 日韩av综合网| 久久国产精品免费看| 成人激情小说乱人伦| 激情五月六月婷婷| 国产亚洲高清一区| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲熟妇无码久久精品| 国产日韩精品一区二区浪潮av| 少妇无码av无码专区在线观看| 日本在线一区二区三区| 欧美成人午夜视频| 国产高潮在线观看| 亚洲一区欧美一区| 99riav国产精品视频| 国产综合精品一区| 好吊妞www.84com只有这里才有精品 | 久久久91精品国产一区不卡| 中文字幕一区二区人妻| 国产精品伦理一区二区| 不卡中文字幕在线观看| 欧美区日韩区| 国产无套精品一区二区| www.成人爱| 国产亚洲a∨片在线观看| 日韩欧美一级大片| 18成人在线观看| 日本在线观看视频一区| 国产精品地址| 精品一区二区不卡| 国产一区二区主播在线| 久久精品电影网站| 丰满人妻一区二区三区无码av| 亚洲一区二区美女| 波多野结衣福利| 奇米影视一区二区三区小说| 免费观看黄色的网站| 一区二区三区亚洲变态调教大结局 | 女人十八毛片嫩草av| 免费成人你懂的| 九一免费在线观看| 日韩精品免费一区二区夜夜嗨 | 国产男人搡女人免费视频| 中文字幕av在线一区二区三区| 激情五月婷婷基地| 欧美freesex交免费视频| 久草一区二区| 国产美女久久| 高清欧美性猛交xxxx| 国产一二三区在线| 日韩视频免费观看高清完整版在线观看| avtt天堂在线| 久久蜜桃av一区二区天堂| 一区二区在线免费看| 亚洲日本久久| 一级日韩一区在线观看| 国产一区二区三区不卡av| 国产精品扒开腿做爽爽爽的视频| 日本中文字幕中出在线| 亚洲无av在线中文字幕| 亚洲第一页视频| 在线观看一区二区精品视频| 久久久99精品| 国产精品萝li| 受虐m奴xxx在线观看| 国产成人精品免费在线| 久久久精品三级| 亚洲国产导航| 日本丰满少妇黄大片在线观看| 色先锋久久影院av| 91亚洲精品丁香在线观看| 四虎4545www国产精品| 久久久久久久久电影| 欧美性天天影视| 亚洲三级黄色在线观看| 可以免费看毛片的网站| 911国产精品| 伊人成年综合网| 欧美日韩免费在线观看| 久久国产一级片| 中文字幕在线免费不卡| 91久久免费视频| www.欧美.com| 久久久久久久久久影视| 国产乱一区二区| 亚洲免费av一区| 青青草国产精品97视觉盛宴 | 黄一区二区三区| 少妇激情一区二区三区| 国产欧美激情| 僵尸世界大战2 在线播放| 亚洲女同另类| 青青草原国产免费| 色777狠狠狠综合伊人| 奇米精品在线| 国产一区2区| 人偷久久久久久久偷女厕| 日本欧美韩国国产| 精品国产一区二区三区麻豆免费观看完整版| 国产一区二区在线观| 国产在线观看不卡| 国产三级一区| 国产专区欧美专区| 四虎国产精品永久在线国在线| 国产精品视频久久久| 草莓视频成人appios| 国产精品高清在线观看| 69堂免费精品视频在线播放| 国产精品1234| h1515四虎成人| 国产精品视频永久免费播放| 先锋欧美三级| 国产欧美日韩精品在线观看| 国内自拍亚洲| 成人黄色免费在线观看| 成人51免费| 97久久天天综合色天天综合色hd| 精品中文字幕一区二区三区| 91精品国产91久久久久青草| 97一区二区国产好的精华液| 91青青草免费在线看| 国产精品欧美大片| 久久国产日韩欧美| 免费av一区| 日韩电影天堂视频一区二区| 国产精品久久久久蜜臀| 黄色影视在线观看| 极品日韩av| 久久久久久久久久久久久国产精品| 蘑菇福利视频一区播放| 中文字幕天天干| 国产精品一区三区| 欧美日韩一区二区三区四区五区六区| 99精品欧美一区二区蜜桃免费| 91精品人妻一区二区| 国产欧美精品国产国产专区| 夫妻性生活毛片| 亚洲成人激情av| 波多野结衣电影在线播放| 欧美精品一卡二卡| 亚洲精品福利网站| 亚洲欧美综合v| 二区三区在线观看| 国产91对白在线播放| abab456成人免费网址| 亚洲曰本av电影| 日本成人7777| 操bbb操bbb| 午夜在线一区| 久久婷婷中文字幕| 99精品视频在线观看| 日本猛少妇色xxxxx免费网站| 一区二区久久久| 国产精品久久久久久久久夜色| 制服丝袜激情欧洲亚洲| 亚洲aaaaaaa| 欧美www在线| 羞羞影院欧美| 国产二区一区| 日韩一区欧美| 自慰无码一区二区三区| 精品一区二区免费在线观看| 真人bbbbbbbbb毛片| 亚洲人成网站在线| 久久久久久在线观看| 日韩欧美一卡二卡| 国产精品二线| 97成人在线视频| 亚洲国产中文在线二区三区免| 日韩av一区二区三区美女毛片| 激情文学一区| 亚洲制服在线观看| 国产欧美日韩激情| 在线观看亚洲天堂| 日韩欧美一级在线播放| eeuss影院在线播放| 欧美一区二三区| 国产成人精品福利| 黑人巨大国产9丨视频| 日韩综合小视频| 毛茸茸多毛bbb毛多视频| 一区二区三区久久| 国产精品久久久久久久久久久久久久久久 | 在线观看成人动漫| 亚洲同性gay激情无套| 亚洲午夜无码久久久久| 亚洲精品小视频| 国产污视频在线播放| av一区二区三区四区电影| 91久久夜色精品国产按摩| 91香蕉视频污版| 99视频有精品| 日韩av免费网址| 亚洲国产精品悠悠久久琪琪 | 久久神马影院| 国产成人综合一区| 久久蜜桃av一区二区天堂| 久久精品国产成人av| 亚洲国产成人久久综合一区| 欧美亚洲系列| 超碰在线97av| 精品福利av| www.男人天堂| 天天综合日日夜夜精品| 免费av网站观看| 97久久精品国产| 丝袜美腿综合| 日韩手机在线观看视频| 久久精品在线免费观看| 中文字幕在线看人| 亚洲区中文字幕| 欧美性片在线观看| 亚洲欧洲一区二区| 激情小说亚洲一区| 免费在线黄色网| 日韩精品一区二区三区中文精品| 欧美卡一卡二| 精品久久久久久乱码天堂| 亚洲一区亚洲| 91精品国自产在线| 91精品欧美综合在线观看最新| 中文字幕在线观看网站| 国产精品加勒比| 午夜亚洲性色福利视频| 国产精品免费无码| 欧美精品xxxxbbbb| 人人超在线公开视频| 狠狠色综合网站久久久久久久| 国产一区二区精品| 久久午夜福利电影| 337p亚洲精品色噜噜噜| 色图在线观看| 久久免费一区| 激情五月播播久久久精品| 久久久久久久久久综合| 日韩精品极品视频免费观看| 日韩精品三区| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 99精品国产一区二区三区| 日本黄色www| 欧美日韩一区二区免费在线观看| 91青青在线视频| 91精品国产91久久久久青草| 国产情侣久久| 中文字幕在线观看二区| 日韩欧美中文一区二区| 在线观看的黄色| gogogo免费高清日本写真| 成人精品一区二区三区四区 | 亚洲国产精品va在线看黑人| 悠悠资源网亚洲青| 黄色网zhan| 久久新电视剧免费观看| 国产片高清在线观看| 国内精品在线一区| 99久久久久国产精品| 国产国语性生话播放| 欧美酷刑日本凌虐凌虐| 无码小电影在线观看网站免费| 艳母动漫在线免费观看| 久久久久久久久久久久久久久99| 国产免费一区二区三区最新不卡| 2018中文字幕一区二区三区|