当前位置: 首页 > Linux

A-Ops性能火焰图——云原生全栈持续性能监控工具

时间:2023-04-06 12:09:34 Linux

对于开发者和运维人员来说,火焰图是定位性能问题的经典方法。使用火焰图可视化系统资源占用(cpu占用、内存占用、调度、IO等),帮助技术人员快速定位资源占用异常的代码级根源,或观察潜在的性能下降趋势,然后优化系统和应用程序性能。然而,现有流行的火焰图工具往往存在一种或多种局限性,实际应用场景比较有限。因此openEuler上的开源项目A-Ops中的gala-ops系列组件提供了适合云原生的全栈持续性能监控火焰图。传统火焰图在实际应用中的痛点1、传统火焰图工具相对独立,难以对接第三方插件或集成到运维系统中。在应用中,有经验的开发者需要结合其他调试工具进行手动分析定位。2.由于开销大,火焰图大多只作为开发调试阶段的工具使用,无法在生产环境中正常部署。因此,对于更常见的场景——即实际生产环境中突发的性能问题,火焰图并不是一种有效的问题定位手段。3.生产环境部署的应用类型复杂多样,很多应用调用不同语言的模块。但是每个火焰图工具往往只针对一种类型的语言。即使同时部署不同语言的火焰图观察工具,生成的火焰图数据也难以统一,难以从系统角度观察不同语言应用的性能比。4、传统的火焰图只能观察进程和线程粒度,是宿主时代的工具。对于云原生系统更注重的容器粒度,传统的火焰图无法直观区分。gala-ops火焰图四大特点1.易于部署和集成Gala-ops是一款针对云基础设施灰度故障的应用级/系统级在线诊断工具。火焰图探针stackprobe集成在gala-gopher组件中。用户只需一键安装gala-gopher,然后在配置文件中开启或关闭火焰图探针即可使用。具体安装部署说明请参考gala-gopher文档。gala-ops火焰图默认会在本地生成svg格式的火焰图。此外,还支持pyroscope、grafana等第三方运维平台。你只需要在配置文件中填写第三方插件的地址,火焰图探针程序会定时自动将火焰图数据上传到远端,供后续分析分析使用。实时监控。下面是gala-opscpuflamegraph对接pyroscope和grafana的例子。通过选择特定时间段,可以查看该时间段的火焰图,对函数cpu占比进行排序,配合其他系统或应用指标,轻松发现和定位问题。2.容器支持在云原生系统中,应用是以容器的形式部署的。在传统火焰图中进行系统级观察时,最多反映线程名称。如果不同容器实例中的线程名称相同,调用栈会合并在一起,无法区分,影响后续的定位和定界。gala-ops火焰图探针可以自动识别机器上的pod和容器,并将工作负载、容器和进程号信息添加到图中。如果进程是workload/container进程,则pod和container分别标有[Pod]和[Con]前缀,进程标有[]前缀。效果图见下图。可以看出,通过查看调用栈底部的第一层,可以清楚地区分宿主进程和容器进程。3、全栈支持gala-ops火焰图,支持编译型和解释型语言的混合代码调用栈分析。目前支持的语言包括C、C++、GO、Rust、JAVA。不同语言的应用,不同语言的函数/方法在同一个调用栈,用户态和内核态都可以在同一个火焰图中展示。并且在使用gala-ops火焰图之前,不需要针对不同语言做额外的配置或者重新部署应用,开箱即用。下图是实测生成的gala-opscpu火焰图。以右边一个tomcat容器调用栈为例,从底层到顶层看调用关系:tomcatpod包含一个容器,在java进程中有一个pid为2434466的容器,名为http-nio-8080-e的JVM线程在进程中占用了最多的CPU。JVM调用C库函数thread_native_entry,然后进入Java方法java.lang.Thread::run,再经过一系列的Java方法调用最终到达ksys_write系统调用,然后进入内核态函数。这样一个Java流程,通过gala-ops火焰图可以追溯到k8s层->OS层->JVM底层实现->Java方法->内核态函数-完整的调用流程。4.Low-overheadgala-opsflamegraph基于ebpf技术,精简栈采样逻辑,实现采样精度(cpu采样频率10ms),对被观察应用性能影响小(一般1%左右)。因此,在大规模生产环境中,也可以持续开启gala-ops火焰图,实时观察应用性能,这样即使出现应用或系统故障,也无需事后重现问题,并且可以通过gala-ops火焰图回溯过去任意时刻的系统状态。我们测试了切换cpu火焰图对不同应用的性能影响:对于中等性能和中等吞吐量的应用,比如tomcat,tps下降在1%以下;对于高性能、高吞吐量的应用,比如kafka,tps下降在2%以下。结果如下:比较切换cpu火焰图探针对tomcat性能的影响:比较切换cpu火焰图探针对kafka写入MQ消息性能的影响:gala-ops火焰图易于部署和集成、容器支持、全栈支持、低开销等特性使开发者和维护者无论是在开发环境还是生产环境,都能够以火焰图的形式预测潜在问题和定位已经发生的问题。功能持续完善目前gala-ops火焰图已经支持CPU使用率和内存泄漏两种火焰图,后续会增加对其他系统资源的观察,如调度、网络IO、磁盘IO等。未来。此外,对其他语言应用程序的支持也在持续开发中。欢迎大家使用gala-ops火焰图,欢迎大家交流反馈。点击https://forum.openeuler.org/t...,即可参与openEuler论坛的讨论!