在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

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

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

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

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

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

    JVMService

    JVMService可以看做一個(gè)定時(shí)器,它收集JVM cpu、內(nèi)存、內(nèi)存池和gc 信息等等參數(shù),并將收集到的信息通過(guò)GRPCChannelManager提供的通道發(fā)送給Collector,GRPCChannelManager這個(gè)類我們?cè)谏掀恼挛覀兙瓦M(jìn)行了介紹,主要是用來(lái)建立連接管理通道的

    JVMService實(shí)現(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ù)制代碼

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

    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()方法中定義兩個(gè)定時(shí)線程池每隔一秒創(chuàng)建一個(gè)線程,一個(gè)是生產(chǎn)線程,一個(gè)是消費(fèi)線程,生產(chǎn)者邏輯對(duì)應(yīng)JVMService的run()方法,而消費(fèi)者的邏輯在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對(duì)象,創(chuàng)建完成后放入隊(duì)列中,從準(zhǔn)備方法中我們知道隊(duì)列大小設(shè)置是600,當(dāng)隊(duì)列滿的時(shí)候,會(huì)取出最久的那個(gè)淘汰掉,然后放入新的JVMMetric對(duì)象到隊(duì)尾。

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

    Sender

    run()方法:

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

    總結(jié)

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

    :heart: 感謝大家

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

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

    相關(guān)推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

      對(duì)于微商朋友來(lái)說(shuō),朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來(lái)逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

      2022年11月27日
    • 30個(gè)無(wú)加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

      茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開(kāi)業(yè),開(kāi)張不到半小時(shí),門店就人滿為患,消費(fèi)者的購(gòu)買熱情十分高漲,而由于人流量過(guò)大造成擁堵,茶顏悅色也不得不暫停營(yíng)業(yè)。 當(dāng)然,這里面排…

      2022年11月27日
    • 拍錯(cuò)了拒收快遞運(yùn)費(fèi)誰(shuí)出(淘寶退貨運(yùn)費(fèi)誰(shuí)出)

      很多人在逛淘寶店的時(shí)候覺(jué)得寶貝圖片看著不錯(cuò)就買回來(lái),結(jié)果收貨后發(fā)現(xiàn)可能不太合適就想退貨了。那么,淘寶退貨的快遞費(fèi)用應(yīng)該由誰(shuí)來(lái)出呢?產(chǎn)生的快遞費(fèi)用應(yīng)該找誰(shuí)來(lái)負(fù)責(zé)呢? 我們知道,根據(jù)《…

      2022年11月27日
    • 筆記本最好配置(目前筆記本最好的配置)

      本文主要講的是筆記本最好配置,以及和目前筆記本最好的配置相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 筆記本電腦什么配置好? 01 CPU:這個(gè)主要取決于頻率和…

      2022年11月26日
    • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)?lái)寶可夢(mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

      寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)?lái)寶可夢(mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

      2022年11月25日
    • cpu性能天梯圖2022 AMD CPU天梯圖最新排行榜出爐

      用戶在DIY自己的主機(jī)時(shí)選擇CPU是非常關(guān)鍵的,CPU可以說(shuō)是電腦的大腦,大家也都想追求好一點(diǎn)的CPU來(lái)使用,但型號(hào)太多了,大部分的用戶都不知道目前哪一款CPU比較好用,快來(lái)看看詳…

      2022年11月24日
    • 《寶可夢(mèng)朱紫》暴飛龍?jiān)趺醋??暴飛龍獲得方法

      寶可夢(mèng)朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實(shí)獲得方法很簡(jiǎn)單,暴飛龍直接是沒(méi)得抓的,需要玩家從寶貝龍進(jìn)化得到,下面一起來(lái)看一下寶可夢(mèng)朱紫暴飛龍獲得…

      2022年11月23日
    • 《寶可夢(mèng)朱紫》布土撥怎么進(jìn)化?布土撥進(jìn)化方法介紹

      寶可夢(mèng)朱紫中,不同的寶可夢(mèng)有不同的進(jìn)化方法,其中布土撥的進(jìn)化方法是比較特殊的。很多玩家不知道寶可夢(mèng)朱紫布土撥怎么進(jìn)化,下面就帶來(lái)寶可夢(mèng)朱紫布土撥進(jìn)化方法介紹,一起來(lái)看看吧,希望能幫…

      2022年11月23日
    • 《寶可夢(mèng)朱紫》薄荷怎么獲得?薄荷獲得方法

      寶可夢(mèng)朱紫中薄荷有改變寶可夢(mèng)的屬性或性格等效果,很多玩家想知道寶可夢(mèng)朱紫薄荷怎么獲得,下面就帶來(lái)寶可夢(mèng)朱紫薄荷獲得方法,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 薄荷獲得方法…

      2022年11月23日

    聯(lián)系我們

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