亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                源碼角度了解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)類,而有關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); }復制代碼

                準備階段就是創(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); }復制代碼

                boot()方法中定義兩個定時線程池每隔一秒創(chuàng)建一個線程,一個是生產(chǎn)線程,一個是消費線程,生產(chǎn)者邏輯對應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.”); } } }復制代碼

                run()中的邏輯主要是創(chuàng)建JVMMetric對象,創(chuàng)建完成后放入隊列中,從準備方法中我們知道隊列大小設置是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)容對你挺有有幫助的話幫忙點點關注!

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

                相關推薦

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

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

                  2022年11月27日
                • 30個無加盟費的項目(茶顏悅色奶茶店加盟費多少)

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

                  2022年11月27日
                • 拍錯了拒收快遞運費誰出(淘寶退貨運費誰出)

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

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

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

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

                  寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

                  寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

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

                  用戶在DIY自己的主機時選擇CPU是非常關鍵的,CPU可以說是電腦的大腦,大家也都想追求好一點的CPU來使用,但型號太多了,大部分的用戶都不知道目前哪一款CPU比較好用,快來看看詳…

                  2022年11月24日
                • 《寶可夢朱紫》暴飛龍怎么抓?暴飛龍獲得方法

                  寶可夢朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實獲得方法很簡單,暴飛龍直接是沒得抓的,需要玩家從寶貝龍進化得到,下面一起來看一下寶可夢朱紫暴飛龍獲得…

                  2022年11月23日
                • 《寶可夢朱紫》布土撥怎么進化?布土撥進化方法介紹

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

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

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

                  2022年11月23日

                聯(lián)系我們

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