免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      源碼角度了解Skywalking之Skywalking是如何進行JVM監(jiān)控的

      源碼角度了解Skywalking之Skywalking是如何進行JVM監(jiān)控的

      源碼角度了解Skywalking之Skywalking是如何進行JVM監(jiān)控的

      大家都知道Skywalking可以監(jiān)控Java的JVM情況,包括垃圾回收情況等等,那么它是怎么實現(xiàn)的呢?今天就帶大家一探究竟。

      通過前幾篇的文章我們知道,Skywalking啟動的時候,會加載各種BootService實現(xiàn)類,而有關(guān)JVM的BootService實現(xiàn)類就是JVMService

      JVMService

      JVMService可以看做一個定時器,它收集JVM cpu、內(nèi)存、內(nèi)存池和gc 信息等等參數(shù),并將收集到的信息通過GRPCChannelManager提供的通道發(fā)送給Collector,GRPCChannelManager這個類我們在上篇文章我們就進行了介紹,主要是用來建立連接管理通道的

      JVMService實現(xiàn)BootService接口和Runnable接口

      我們按照調(diào)用方法的順序分析一下吧

      prepare()方法

      JVMService的prepare()方法:

      public static int BUFFER_SIZE = 60 * 10;public void prepare() throws Throwable { queue = new LinkedBlockingQueue(Config.Jvm.BUFFER_SIZE); sender = new Sender(); ServiceManager.INSTANCE.findService(GRPCChannelManager.class).addChannelListener(sender); }復(fù)制代碼

      準備階段就是創(chuàng)建一個LinkedBlockingQueue類型的阻塞隊列,隊列大小為600,這個隊列保存的是JVMMetric對象,然后創(chuàng)建了一個Sender對象,找到GRPCChannelManager對象,并把Sender對象加入監(jiān)聽類中。

      boot()方法

      JVMService的boot()方法:

      public void boot() throws Throwable { collectMetricFuture = Executors .newSingleThreadScheduledExecutor(new DefaultNamedThreadFactory(“JVMService-produce”)) .scheduleAtFixedRate(new RunnableWithExceptionProtection(this, new RunnableWithExceptionProtection.CallbackWhenException() { @Override public void handle(Throwable t) { logger.error(“JVMService produces metrics failure.”, t); } }), 0, 1, TimeUnit.SECONDS); sendMetricFuture = Executors .newSingleThreadScheduledExecutor(new DefaultNamedThreadFactory(“JVMService-consume”)) .scheduleAtFixedRate(new RunnableWithExceptionProtection(sender, new RunnableWithExceptionProtection.CallbackWhenException() { @Override public void handle(Throwable t) { logger.error(“JVMService consumes and upload failure.”, t); } } ), 0, 1, TimeUnit.SECONDS); }復(fù)制代碼

      boot()方法中定義兩個定時線程池每隔一秒創(chuàng)建一個線程,一個是生產(chǎn)線程,一個是消費線程,生產(chǎn)者邏輯對應(yīng)JVMService的run()方法,而消費者的邏輯在Sender的run()方法中

      run()方法

      JVMService的run()方法:

      public void run() { if (RemoteDownstreamConfig.Agent.SERVICE_ID != DictionaryUtil.nullValue() && RemoteDownstreamConfig.Agent.SERVICE_INSTANCE_ID != DictionaryUtil.nullValue() ) { long currentTimeMillis = System.currentTimeMillis(); try { JVMMetric.Builder jvmBuilder = JVMMetric.newBuilder(); jvmBuilder.setTime(currentTimeMillis); jvmBuilder.setCpu(CPUProvider.INSTANCE.getCpuMetric()); jvmBuilder.addAllMemory(MemoryProvider.INSTANCE.getMemoryMetricList()); jvmBuilder.addAllMemoryPool(MemoryPoolProvider.INSTANCE.getMemoryPoolMetricsList()); jvmBuilder.addAllGc(GCProvider.INSTANCE.getGCList()); JVMMetric jvmMetric = jvmBuilder.build(); if (!queue.offer(jvmMetric)) { queue.poll(); queue.offer(jvmMetric); } } catch (Exception e) { logger.error(e, “Collect JVM info fail.”); } } }復(fù)制代碼

      run()中的邏輯主要是創(chuàng)建JVMMetric對象,創(chuàng)建完成后放入隊列中,從準備方法中我們知道隊列大小設(shè)置是600,當隊列滿的時候,會取出最久的那個淘汰掉,然后放入新的JVMMetric對象到隊尾。

      從組裝JVMMetric對象的過程我們可以看到,JVMMetric對象中包含了當前時間,CPU指標、內(nèi)存指標還有垃圾回收指標。這三個指標的獲取都是 利用枚舉實現(xiàn)的單例模式 ,然后getGCList()方法中調(diào)用了GCModule抽象類的getGCList()方法,在獲取新生代和老年代垃圾回收器名稱的時候定義了抽象方法,具體邏輯每個垃圾回收器重寫各自的抽象方法, 這是模板方法的體現(xiàn)

      Sender

      run()方法:

      Sender對象作為消費者,它的功能就是通過drainTo()方法來把隊列中的數(shù)據(jù)轉(zhuǎn)移到buffer集合中,然后發(fā)送到Collector中。

      總結(jié)

      這篇文章我們講了Skywalking是怎么進行JVM參數(shù)收集的,主要涉及到的類是JVMService,它的類定義了一個LinkedBlockingQueue類型的阻塞隊列,長度是600,然后啟動方法中啟動了兩個定時線程池創(chuàng)建了生產(chǎn)者JVMService線程和消費者Sender線程,JVMService作為生產(chǎn)者收集CPU、內(nèi)存、垃圾回收信息等放入隊列,Sender作為消費者從隊列獲取到所有JVM信息發(fā)送給Collector

      :heart: 感謝大家

      如果你覺得這篇內(nèi)容對你挺有有幫助的話幫忙點點關(guān)注!

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      (0)
      用戶投稿
      上一篇 2022年6月20日 09:27
      下一篇 2022年6月20日 09:27

      相關(guān)推薦

      • 游必有方!安全是露營的第一道門檻

        北京日報客戶端 | 實習記者 高源 近日,延慶區(qū)為全區(qū)10余家具有合法經(jīng)營資質(zhì)的景區(qū)發(fā)布《延慶區(qū)景區(qū)帳篷露營管理指引(試行)》,明確所在景區(qū)承擔帳篷露營的日常主體責任。 在社交媒體…

        2022年8月18日
      • 皮膚抗皺方法有哪些-蔓之研MPT項目幫您“解說”

        “我的肌膚不緊致,面部肌膚也松弛下垂,面部肌膚也沒有彈性,臉上的皺紋也多了,緊致皮膚抗皺有什么方法”,這諸多的問題大家是不是正在經(jīng)歷?要想有效抗皺,搞清皺紋出現(xiàn)的原因是關(guān)鍵,下面我…

        2022年8月10日
      • 小鯨云無線共享隔空充的適應(yīng)場景對象

        小鯨云無線共享隔空充適應(yīng)場地分為A、B、C三大等級,實際應(yīng)用場地分為:機場、酒吧、KTV、會所、酒店等等。 一:酒吧,KTV,清吧,洗腳按摩洗浴桑拿,會所,酒店這類娛樂場所 這類場…

        2022年6月19日
      • 洗地機中的“機皇”,追覓M13首測

        【第一步, 先關(guān)注我】 大家好, 我是胡侃侃。 前言 清潔類家電在最近一年, 各個品牌都在加大產(chǎn)品力上面的投入, 我深度使用了多個品牌的二十多款掃拖機器人, 十多款的洗地機產(chǎn)品, …

        2022年8月8日
      • 你的手機號關(guān)聯(lián)了多少互聯(lián)網(wǎng)賬號?一鍵查詢和解綁方法有了→

        你名下的手機號 關(guān)聯(lián)了多少互聯(lián)網(wǎng)賬號? 是否被人冒用注冊了互聯(lián)網(wǎng)賬號? 如發(fā)現(xiàn)被冒用注冊了賬號該怎么辦? …… 不用擔心 “一證通查2.0”服務(wù)來了! 相關(guān)…

        2022年8月2日
      • 政策措施加快落地 家電消費綠色升級

        據(jù)新華社北京電 (記者鄒多為)家電消費是居民消費重要組成部分,在穩(wěn)增長、促消費、擴就業(yè)等方面發(fā)揮著重要作用。近期,家電行業(yè)再迎政策利好,一系列支持措施的相繼出臺進一步激發(fā)用戶需求釋…

        2022年8月5日
      • 北京譜儀III開創(chuàng)探索正反物質(zhì)不對稱性的新方法

        來源:人民網(wǎng) 原創(chuàng)稿 人民網(wǎng)北京6月2日電 (記者趙竹青)記者從中國科學院獲悉,北京譜儀III合作組實現(xiàn)了一種創(chuàng)新實驗方法,為研究物質(zhì)和反物質(zhì)不對稱性提供了極其靈敏的實驗探針。相關(guān)…

        2022年8月16日
      • 蘋果叫停 iPhone14 漲價計劃,如何從商業(yè)角度解讀此舉?

        蘋果叫停 iPhone14 漲價計劃,如何從商業(yè)角度解讀此舉?8月1日,彭博社記者馬克·古爾曼表示,蘋果方面打算叫停iPhone 14系列漲價100美元的計劃,目的可能是確保新機的…

        2022年8月4日
      • 錢大媽獲新融資將發(fā)力預(yù)制菜,但它得先想好這些問題

        記者 | 吳容 編輯 | 牙韓翔 近日,社區(qū)生鮮連鎖品牌“錢大媽”獲得了新一輪融資,由和智投資進行領(lǐng)投,交易金額暫未披露。 據(jù)天眼查APP顯示,和智投資全稱為廣東和智投資管理有限公…

        2022年8月4日
      • 頭部主播缺位后,國貨失守

        營銷界有過這樣一個說法:“先找KOC在小紅書鋪5000篇測評,再在知乎鋪2000篇問答,最后登上李佳琦、薇婭直播間,一整套下來一個新品牌的雛形基本就成了?!边@條鏈路上,品牌前期的一…

        2022年8月17日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息