乐趣区

关于ebpf:关于程序摄像头Trace-Profiling的十大热门问题

“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:能够增加小编微信、关注咱们的公众号哦~

退出移动版