什么是性能分析?性能分析是分析应用程序性能以提高代码段性能的行为。可视化配置文件和快速识别性能问题的最流行方法之一是生成“火焰图”。例如,下图中的y轴是堆栈深度,x轴跨越样本总体。每个矩形都是一个函数,其中宽度表示它在配置文件中出现的频率。从左到右的顺序无关紧要(堆栈按字母顺序排序)。如何分析Kubernetes上的应用程序性能?应用程序性能分析是一项艰巨的任务。大多数分析器有两个主要问题:需要修改应用程序。通常,这可以通过向执行命令添加标志或将一些分析库导入代码来实现。由于在分析过程中会严重影响性能,因此在生产中通常会避免分析。对在Kubernetes集群中运行的应用程序执行分析时更加困难。需要部署一个包含配置文件修改的新容器镜像,而不是当前正在运行的容器。此外,一些性能问题可能会在应用程序重新启动时消失,从而增加调试难度。Kubernetes应用性能分析解决方案Kubernetes中可以使用kubectlFlame来分析Pod应用性能。KubectlFlame是一个kubectl插件,可以为在Kubernetes中运行的分析应用程序提供流畅的体验,而无需任何应用程序修改或停机。此外,kubectlflame的目标是通过最小化性能损失来实现生产友好。源码地址:https://github.com/VerizonMedia/kubectl-flame工作原理kubectlflame在与目标容器相同的节点上启动一个KubernetesJob。在幕后,kubectl-flame使用async-profiler为Java应用程序生成火焰图。通过共享/tmp文件夹与目标JVM交互。Golang支持基于ebpf的分析。Python支持基于py-spy。使用所需的支持语言:Go、Java(任何基于JVM的语言)和PythonKubernetes集群使用Docker作为容器运行时(在GKE、EKS和AKS上测试)安装$kubectlkrewinstallflame使用分析KubernetesPod分析Java应用程序mypod1分钟,并保存火焰图到/tmp/flamegraph.svg$kubectlflamemypod-t1m--langjava-f/tmp/flamegraph.svg来分析基于alpine的操作系统容器要在基于alpine的容器中分析Java应用程序,您需要使用--alpine标志$kubectlflamemypod-t1m-f/tmp/flamegraph.svg--langJava--alpine注意:这个--alpine标志仅在Java应用程序中需要,在Go分析中不需要。分析sidecar容器包含多个容器的Pod需要指定目标容器作为参数通过--pgrep标志的目标进程名称:$kubectlflamemypod-t1m--langgo-f/tmp/flamegraph.svg--pgrepgo-appJava分析假设进程名称是java。如果您的进程名称不同,请使用--pgrep标志。参考链接https://github.com/VerizonMedia/kubectl-flamehttps://blog.csdn.net/weixin_26746861/article/details/108935182
