应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

源码角度了解Skywalking之Skywalking是如何

  源码角度了解Skywalking之Skywalking是如何进行JVM监控的
  大家都知道Skywalking可以监控Java的JVM情况,包括垃圾回收情况等等,那么它是怎么实现的呢?今天就带大家一探究竟。
  通过前几篇的文章我们知道,Skywalking启动的时候,会加载各种BootService实现类,而有关JVM的BootService实现类就是JVMServiceJVMService
  JVMService可以看做一个定时器,它收集JVMcpu、内存、内存池和gc信息等等参数,并将收集到的信息通过GRPCChannelManager提供的通道发送给Collector,GRPCChannelManager这个类我们在上篇文章我们就进行了介绍,主要是用来建立连接管理通道的
  JVMService实现BootService接口和Runnable接口
  我们按照调用方法的顺序分析一下吧prepare()方法
  JVMService的prepare()方法:publicstaticintBUFFERSIZE6010;publicvoidprepare()throwsThrowable{queuenewLinkedBlockingQueueJVMMetric(Config。Jvm。BUFFERSIZE);sendernewSender();ServiceManager。INSTANCE。findService(GRPCChannelManager。class)。addChannelListener(sender);}复制代码
  准备阶段就是创建一个LinkedBlockingQueue类型的阻塞队列,队列大小为600,这个队列保存的是JVMMetric对象,然后创建了一个Sender对象,找到GRPCChannelManager对象,并把Sender对象加入监听类中。boot()方法
  JVMService的boot()方法:publicvoidboot()throwsThrowable{collectMetricFutureExecutors。newSingleThreadScheduledExecutor(newDefaultNamedThreadFactory(JVMServiceproduce))。scheduleAtFixedRate(newRunnableWithExceptionProtection(this,newRunnableWithExceptionProtection。CallbackWhenException(){Overridepublicvoidhandle(Throwablet){logger。error(JVMServiceproducesmetricsfailure。,t);}}),0,1,TimeUnit。SECONDS);sendMetricFutureExecutors。newSingleThreadScheduledExecutor(newDefaultNamedThreadFactory(JVMServiceconsume))。scheduleAtFixedRate(newRunnableWithExceptionProtection(sender,newRunnableWithExceptionProtection。CallbackWhenException(){Overridepublicvoidhandle(Throwablet){logger。error(JVMServiceconsumesanduploadfailure。,t);}}),0,1,TimeUnit。SECONDS);}复制代码
  boot()方法中定义两个定时线程池每隔一秒创建一个线程,一个是生产线程,一个是消费线程,生产者的逻辑对应JVMService的run()方法,而消费者的逻辑在Sender的run()方法中run()方法
  JVMService的run()方法:publicvoidrun(){if(RemoteDownstreamConfig。Agent。SERVICEID!DictionaryUtil。nullValue()RemoteDownstreamConfig。Agent。SERVICEINSTANCEID!DictionaryUtil。nullValue()){longcurrentTimeMillisSystem。currentTimeMillis();try{JVMMetric。BuilderjvmBuilderJVMMetric。newBuilder();jvmBuilder。setTime(currentTimeMillis);jvmBuilder。setCpu(CPUProvider。INSTANCE。getCpuMetric());jvmBuilder。addAllMemory(MemoryProvider。INSTANCE。getMemoryMetricList());jvmBuilder。addAllMemoryPool(MemoryPoolProvider。INSTANCE。getMemoryPoolMetricsList());jvmBuilder。addAllGc(GCProvider。INSTANCE。getGCList());JVMMetricjvmMetricjvmBuilder。build();if(!queue。offer(jvmMetric)){queue。poll();queue。offer(jvmMetric);}}catch(Exceptione){logger。error(e,CollectJVMinfofail。);}}}复制代码
  run()中的逻辑主要是创建JVMMetric对象,创建完成后放入队列中,从准备方法中我们知道队列大小设置是600,当队列满的时候,会取出最久的那个淘汰掉,然后放入新的JVMMetric对象到队尾。
  从组装JVMMetric对象的过程我们可以看到,JVMMetric对象中包含了当前时间,CPU指标、内存指标还有垃圾回收指标。这三个指标的获取都是利用枚举实现的单例模式,然后getGCList()方法中调用了GCModule抽象类的getGCList()方法,在获取新生代和老年代垃圾回收器名称的时候定义了抽象方法,具体逻辑每个垃圾回收器重写各自的抽象方法,这是模板方法的体现Senderrun()方法:
  Sender对象作为消费者,它的功能就是通过drainTo()方法来把队列中的数据转移到buffer集合中,然后发送到Collector中。总结
  这篇文章我们讲了Skywalking是怎么进行JVM参数收集的,主要涉及到的类是JVMService,它的类定义了一个LinkedBlockingQueue类型的阻塞队列,长度是600,然后启动方法中启动了两个定时线程池创建了生产者JVMService线程和消费者Sender线程,JVMService作为生产者收集CPU、内存、垃圾回收信息等放入队列,Sender作为消费者从队列获取到所有JVM信息发送给Collector:heart:感谢大家
  如果你觉得这篇内容对你挺有有帮助的话帮忙点点关注!

网络基础知识连载1ampampamp2特别说明:本文为原创内容,但部分图片来源于网络1。什么是网络?网络非常像现实生活中邮寄包裹,必须知道目的地址和本地地址;有寄有回2。OSI参考模型(开放式系统……北向资金,继续买买买,北向资金今天净买入最多的10支个股榜出北向资金,继续买买买,北向资金今天净买入金额最多的10支个股榜单出炉,其中,五粮液、伊利股份、和迈瑞医疗买入的金额,占比前三名。1。五粮液,北向资金,今天净买入成交金额5……春回石海,僰苗有礼来宜宾兴文石海花样过大年蜀南文旅春回大地,万物复苏玉兔呈祥,辞旧迎新提前祝大家新年快乐!happy兔year!祝大家新春快乐!!!新春佳节将至咱们兴文石海肯定……2025年的iPhone,从内到外,全部自研如果来概括近几年苹果的发展趋势,掌控应该是最为贴切的一个。在全球逐步建立起最优秀、最可靠供应链,几乎占据苹果营收半壁江山的iPhone也成为了每年的科技风向标,以及不断引……想买一台三轮摩托车,用来全国环游摩旅,如何?想买一台三轮摩托车,用来全国环游摩旅,如何?我是骑士分享。今年春节过后,春暖花开,必定会迎来一个前所未有的旅行热潮,而摩旅作为其中的个性化旅行方式,也将会持续走热,所以提……龙狮惨败青岛!林书豪梅森离队倒计时乔丹贝尔能否证明自己?大家好!随着CBA常规赛第1轮的结束,原本上赛季第8名的龙狮男篮会以大比分胜出青岛男篮这支青年军。但事与愿违,大比分输给了青岛。主帅郭志强场上也是露出无奈的表情。林书豪梅……百岁老人选择绝食结束生命,确实不该,实属罕见最近看了一篇某知名教授老婆年近百岁,最后选择绝食了结一生!此文不忍心看完,大概意思子女孝顺,老人家不想麻烦晚辈,选择独居,最终无法忍受老年病痛折磨,才选择如此下策了结一生……湖南张家界云雾绕峰林碧水映蓝天世界自然遗产地湖南张家界武陵源以独特的张家界地貌闻名中外,被誊为扩大的盆景,缩小的仙境。吴勇兵摄世界自然遗产地张家界武陵源百龙天梯云雾缭绕。吴勇兵摄世界自然遗产地张……广州人口最少的一个区,虽然位置偏远,却是美丽的后花园广州GDP排名第一的区是天河区,人口最多的区是白云区,人口和GDP最少的区是从化区。从化也是广州市最偏远的一个区,人口少是因为山地众多,加上距离中心城区相对遥远,不过这里……最强海王黄宗泽,恋爱8年偷吃成性,戏外比戏内还要渣有人说这辈子能被黄宗泽渣一次是此生最大的福分黄宗泽虽然是典型的花花公子但是男人味和颜值双双在线即便与无数女星传出过绯闻都依旧阻挡不了他的魅力……中医治疗食管癌(噎膈)古方1则,理气化瘀,消肿散结【方名】理气化结汤【组成】八月札、枸橘、急性子、干蟾皮、白花蛇舌草、丹参、生马钱子、公丁香、广木香、生南星、蜣螂虫、夏枯草、紫草根、苦参、瓦楞子、天龙。【用法】每日……青春有梦正当时何为少年?他们谈风雨不惧,论未来不忧。他们追逐梦想,他们无所畏惧,只因他们是少年。青少年是早晨八九点钟的太阳,青少年最有朝气,是国家的未来,民族的希望,青春逢盛世,追梦正……
吐谷浑吐蕃裕固族(蚩尤)军部族终于将吐谷浑这个词彻底搞清楚了,原来其真的是吐蕃裕固族(蚩尤)军部族的三个华夏部族的古老混合体,这就是如下的表达:吐谷浑吐蕃裕固族军部族其非常庞大,立过吐谷浑国,归……电脑cpu温度过高怎么办(cpu温度100多度会不会烧坏了)在电脑的使用过程中,我们通常会遇到蓝屏死机或是黑屏等现象,而排除的原因无非有系统原因或是硬件原因,其实在有些情况下往往是因为CPU温度过高也会导致上述的情况出现。为了安全……一顿多少斤(2000斤等于多少吨)在税法计算中,有时候并不是搞不懂原理,而是被单位之间的换算搞晕了。下面列举两个典型的单位换算。1、白酒消费税的从量计征。白酒消费税的定额税率是,0。5元500……什么花是紫色的(开紫色花的植物的图片及名称)小众紫色小花,清新又典雅,哪有不惹人喜欢的道理花朵为紫色的品种,在生活中还是比较少见的,比较出名的有薰衣草之类的。其实吧,除此之外,还是有很多选择的。小花为大家准备了几种……MQJDKBug导致线程阻塞案例分析背景介绍业务介绍在某学习APP浏览文章,客户端会将浏览的文章信息上传到服务端,服务端将浏览信息最终存储到HBase;在某学习APP首页点击【我的】【历史】,会展示用……为什么晚上咳嗽厉害(咳嗽厉害,尤其晚上咳嗽厉害)咳咳咳最近小叮当的办公室里,咳嗽声总是此起彼伏。春季确实是咳嗽高发季节,有的人就十分苦恼:白天咳也就算了,到了晚上睡觉的时候,偏偏咳得更严重!猛烈的咳嗽几乎把上半身……三星w23折叠屏手机要发布了,这就是zfold和zfilp4三星w23和w23filp也是快发布了,其实应该就是zfold4和zfilp4的改进版,就是这样的设计思路。其实看设计,就是zfold4和zfilp4的设计思路,但会有一……排比句怎么写(小学三年级排比句30个)1。正因为它如此持久,才更为深沉;正因为它如此曲折,才更显珍贵;正因为它如此艰难,才更加震撼。2。回顾百年伟业,增强了奋斗的骨气;礼赞时代辉煌,增强了奋斗的底气;展望未来……眼干眼涩流泪?老中医的秘方,三宝茶饮喝起来谁最忙?眼睛谁最累?眼睛谁最辛苦?眼睛谁最吃力?眼睛谁最显年纪?眼睛介绍明目三宝茶饮:枸杞子、菊花、决明子1、枸杞子中医认为,枸杞子具……效仿曼联给穆里尼奥干股,已带来四大赞助,这是魔力鸟还是富贵鸟穆二年的罗马,很快就要做出选择了,要不要效仿曼联,在上市的时候,给穆里尼奥干股,从而留住王朝的根基,就像当年格雷泽为弗格森所做的那样。话说当年,格雷泽家族先是空手套白狼,……1公里多少千米(1公里等于多少千克)很多小伙伴说起自己行车速度总喜欢说跑了XX迈、跑了XX码本是想表达每小时跑多少公里但实际上迈、码、公里小时作为单位来讲并不等同这样的读法是错误读法……新帅东亮首秀,国安四球翻江国安队球员张玉宁(右)与长江队球员栗鹏比赛中争顶。新华社记者肖艺九摄昨晚,北京国安队在2022赛季中超联赛第13轮中客场4比1大胜武汉长江队。国安队代理主教练隋东亮在其率……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网