当前位置: 首页 > 科技观察

推荐一款Kubernetes应用性能分析工具KubectlFlame

时间:2023-03-17 20:08:47 科技观察

什么是性能分析?Profiling是分析应用程序性能以提高代码质量的常用方法,而最流行的可视化Profiling方法是生成火焰图。基于SpringFramework的Java应用程序的火焰图,y轴是堆栈深度,x轴跨越样本群体。每个矩形都是一个函数,其中宽度表示它出现的频率,从左到右的顺序无关紧要(堆栈按字母顺序排序)。在Kubernetes上进行分析分析是一项有些复杂的任务,大多数分析器存在两个主要问题:需要修改应用程序,通常是在执行命令中添加标志或将一些分析库导入代码中。由于分析期间性能受到严重影响,通常避免在生产环境中进行分析。选择正确的分析器可能会解决这些问题,但这需要仔细研究,并且通常取决于编程语言和操作系统。对Kubernetes集群中运行的应用程序执行分析时变得更加困难。需要部署一个包含配置文件修改的新容器镜像,而不是当前正在运行的容器。此外,一些性能问题可能会在应用程序重新启动时消失,从而增加调试难度。KubectlflameKubectlFlame是一个生成火焰图的kubectl插件#128293;以低开销分析应用程序性能,无需任何应用程序修改或停机。项目仓库地址:https://github.com/VerizonMedia/kubectl-flame安装可以通过Krew安装kubectlflame插件。安装Krew后,您可以通过以下命令安装它:$kubectlkrewinstallflame使用所需支持的语言:Go、Java(任何基于JVM的语言)、Python和RubyKubernetes集群使用Docker作为容器运行时(在GKE、EKS上测试)和AKS)kubectl-flame如何通过在与目标容器相同的节点上启动分析器来工作要开始分析,大多数分析器将与目标容器共享一些资源:例如通过将hostPID设置为true来启用PID名称空间共享,启用文件系统通过挂载/var/lib/docker和查询overlayFS共享。在后台,kubectl-flame使用async-profiler为Java应用程序生成火焰图,并通过共享的/tmp文件夹与目标JVM进行交互。Golang支持基于ebpf的分析,Python支持基于py-spy的分析。kubectlflame概览用例1.分析KubernetesPod分析Java应用mypod1分钟,将火焰图保存到/tmp/flamegraph.svg:$kubectlflamemypod-t1m--langjava-f/tmp/flamegraph.svg2.分析基于alpine的容器ProfilingJavaapplicationsinanalpine-basedcontainerrequiresthe--alpineflag:$kubectlflamemypod-t1m-f/tmp/flamegraph.svg--langJava--alpine注意:这个--alpineflag只是Java应用程序需要,而Go分析不需要此标志。3、分析包含多个容器的sidecar容器,需要指定目标容器为参数:$kubectlflamemypod-t1m--langgo-f/tmp/flamegraph.svgmycontainer本文转载自:《k8s技术圈》,原文:http://t.cn/A6t8p02V,版权归原作者所有。欢迎投稿,投稿邮箱:editor@hi-linux.com。