“ Trace-Profiling通过eBPF技术将程序代码执行过程转换成操作系统资源耗费过程,并交融tracing、logging、metrics等多种可观测性技术,造成一个相似光学摄像头的程序摄像头。次要能够帮忙开发者理解程序执行过程当中每一毫秒在干什么。”

Q:Trace Profiling能够解决什么场景下的问题?

A:请参考:Kindling程序摄像头——Trace-Profiling性能正式公布


Q:Trace Profiling捕获的是一次申请下,所有工作线程的执行实况,这些线程是指申请执行这段时间内,执行了事件的线程吗?

A:捕获的是所有工作线程的执行状况。从eBPF角度是分不进去哪些线程是与申请无关,所以咱们有个要害线程概念,要害线程概念就是执行此次申请的线程,之所以展现所有线程的执行状况目标是为了可能发现要害线程在执行过程中被挂起的起因,很可能是因为其它线程如JVM虚拟机线程执行GC操作导致的。咱们以后没有方法齐全辨认所有的场景,到底哪些线程的执行行为会影响要害线程的执行过程。为了可能实在还原程序的执行状况,所以咱们将所有工作线程的执行状况都记录展现进去,之后靠人为比照剖析要害线程被挂起时,其它线程在做什么,从而判断是哪些线程导致要害线程被挂起的。


Q: 这么多工作线程,什么是本次申请的要害线程?断定根据是什么?

A:要害线程是在此过程当中,解决此次申请的线程。断定根据是通过与tracing零碎做集成,比方与skywalking集成,能够清晰无误的断定解决此次申请的线程。


Q:Kindling agent是怎么捕捉到线程的执行事件的?又是怎么划分某个事件具体是在net?lock?futex?cpu on?file?epoll?other?

A:通过对屡次switch做判断,从而判断出oncpu的工夫。通过对要害零碎调用进行辨别判断offcpu类型,比方write read归属到IO,再依据fd的属性是网络还是文件从而判断是网络IO还是文件IO。epoll就是网络系统调用。futex是一个比拟难以解释的零碎调用,因为程序在太多场合应用了futex,目前曾经辨认次要场景有如下:

  • 线程闲暇
  • 线程执行锁操作
  • 线程被挂起
  • java程序的sleep操作实现
    咱们是通过如下规定判断futex到底是何意义的:
  • 在要害线程的trace start工夫之前的futex是闲暇状态
  • 从JVM中获取java虚拟机层面锁相干信息,通过此信息解释在要害线程trace start 与 trace end的futex工夫

在排除以上两种状况之后,在要害线程trace start与trace end之间的futex,绝大多数状况咱们认为就是被其余线程烦扰导致的挂起时间。在执行一次trace当中的业务代码当中,咱们认为根本不会有开发写sleep操作,如果有写,的确在当前情况下,是比拟难以辨别sleep的futex与线程烦扰的挂起操作。


Q:一次申请的IO/Trace start、End别离从哪一刻开始算?

A:对于一次申请过程而言,理论执行流程是操作系统先实现数据筹备,也就是IO start,等有可用执行线程之后,线程会将IO http数据转成序列化对象,而后调用springcloud的control或者dubbo的服务接口开始一次trace,所以IO start是早于trace start的,然而在显示的时候,两者工夫可能十分靠近,所以根本重合了,然而如果呈现线程不够的状况下,能够显著看出io start早于trace start。当申请trace在业务代码层被解决完结之后,也就是tracing零碎将trace收回来的时候trace end会被记录,之后当申请对应的响应通过零碎调用写回的时候点,咱们记录为io end。


Q:Kindling agent装置为什么要基于k8s的环境?如果小公司没有装k8s环境,不装docker能够用Trace Profiling吗?

A:实践上非k8s环境是能够应用,然而kindling指标用户是云原生的用户,非k8s的用户不是咱们的指标用户。次要有以下几点思考。

  1. 在非云原生的环境中操作系统版本对eBPF的反对可能性较低
  2. 在非云原生的环境中,遇到比较复杂的问题可能性较小,简略问题能够应用tracing、logging、metrics工具解决。

Q:应用Trace Profiling前,为什么要装置Skywalking探针?它在外面采集了哪些数据?和Kindling agent是怎么分工合作的?

A:之所以叫Trace profiling就是要剖析一次trace中的span理论执行状况,所以肯定须要和trace零碎对接能力失去trace相干信息。因为咱们目前只对接了国内罕用的skywalking,所以要求用户先装置skwwalking探针,skywalking探针采集的数据就是依照其原有工作失常工作,咱们没有革新skywalking探针。对接原理就是咱们须要trace探针或者sdk告诉咱们以后执行的申请的线程是哪一个线程,以及trace开始工夫和完结工夫。


Q: 如何装置Kindling,并开启Trace Profiling性能?

A:参考装置教程

我的项目开源地址

官网地址


Q: 如何操作应用Trace Profiling?

A:参考操作教程:

Q:我还有别的疑难和想法,或者应用上遇到问题,该怎么分割你们?

A:能够增加小编微信、关注咱们的公众号哦~