专栏首页运维之美推荐一款 Kubernetes 应用性能分析工具 Kubectl Flame

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

什么是性能分析?

性能分析是分析应用程序性能来改进代码质量的常用方法,最流行的可视化性能分析方法是生成火焰图。

基于 Spring 框架的 Java 应用的火焰图

y轴是堆栈深度,x轴跨越样本总体。每个矩形都是一个函数,其中宽度显示它出现的频率,从左到右的排序并不重要 (堆栈按字母顺序排序)。

Kubernetes 上的性能分析

性能分析是一项较为复杂的任务,大多数探查器有两个主要问题:

  • 需要修改应用程序,通常可以通过将标志添加到执行命令或将一些性能分析库导入代码中来实现。
  • 由于在分析过程中会严重影响性能,因此通常避免在生产环境中进行性能分析。

选择正确的探查器可能会解决这些问题,但是这需要仔细去进行研究,并且通常取决于编程语言和操作系统。

在 Kubernetes 集群中运行的应用程序上执行分析时,会变得更加困难。需要部署一个包含配置文件修改的新容器镜像,而不是当前正在运行的容器。此外,当应用程序重新启动时,某些性能问题可能会消失,这就使得调试变得困难。

Kubectl flame

Kubectl Flame 是一个 kubectl 插件,可以以较低的开销生成火焰图?来分析应用程序性能,无需进行任何应用程序修改或停机。

项目仓库地址:https://github.com/VerizonMedia/kubectl-flame

安装

可以通过 Krew 来安装 kubectl flame 插件,一旦安装了 Krew,就可以通过如下命令进行安装:

$ kubectl krew install flame

使用要求

  • 支持的语言:Go、Java(任何基于JVM的语言)、Python 和 Ruby
  • 使用 Docker 作为容器运行时的 Kubernetes 集群(已在 GKE,EKS 和 AKS 上测试)

运行原理

kubectl-flame 通过在与目标容器相同的节点上启动一个探查器来启动性能分析,大多数探查器将与目标容器共享一些资源:比如通过将 hostPID 设置为 true 来启用 PID 命名空间共享,通过挂载 /var/lib/docker 并查询 overlayFS 来启用文件系统共享。

在后台kubectl-flame使用 async-profiler 来为 Java 应用程序生成火焰图,通过共享/tmp文件夹与目标 JVM 进行交互,Golang 则支持基于 ebpf 分析,Python 支持基于 py-spy 进行分析。

kubectl flame 概述

使用实例

  1. 分析 Kubernetes Pod

分析 Java 应用 mypod 1分钟,并在将火焰图保存到 /tmp/flamegraph.svg

$ kubectl flame mypod -t 1m --lang java -f /tmp/flamegraph.svg
  1. 分析基于 alpine 的容器

在基于 alpine 的容器中分析 Java 应用程序需要使用 --alpine 标志:

$ kubectl flame mypod -t 1m -f /tmp/flamegraph.svg --lang Java --alpine

注意:仅 Java 应用程序需要此 --alpine 标志,而 Go 分析则不需要该标志。

  1. 分析 sidecar 容器

包含多个容器的 Pod 需要将目标容器指定为参数:

$ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg mycontainer

本文转载自:「 k8s技术圈 」,原文:http://t.cn/A6t8p02V,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

本文分享自微信公众号 - 运维之美(Hi-Linux),作者:阳明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 应用性能分析工具 - Kubectl Flame

    Profile 是分析应用程序性能来改进代码质量的常用方法,最流行的可视化性能分析方法是生成火焰图。

    CNCF
  • Kubernetes 应用性能分析工具 - Kubectl Flame

    Profile 是分析应用程序性能来改进代码质量的常用方法,最流行的可视化性能分析方法是生成火焰图。

    我是阳明
  • Kubernetes Pod应用性能分析工具 Kubectl Flame

    性能分析是分析应用程序性能以改善代码段性能的行为。可视化配置文件并快速识别性能问题的最流行方法之一是生成 “火焰图”。例如下图

    YP小站
  • 推荐一款开源即时性能分析工具 Pyroscope

    当网站上线后,流量增加或短暂功能故障,都会造成使用者体验相当不好,而这时该怎么快速找到性能的瓶颈呢?通常 CPU 达到 100% 时,有时候也很难复制及找出关键...

    iMike
  • Kubernetes组件问题排查的一些方法

    Kubernetes的基础组件就像一栋房子的地基,它们的重要性不言而喻。作为Kubernetes集群的维护者,经常会遇到组件的问题,那平时是怎么去定位解决的呢?

    没有故事的陈师傅
  • 推荐一款 Kubernetes YAML 文件静态分析工具 KubeLinter

    在 Kubernetes 的世界中,我们使用 YAML 文件,对其进行部署以创建各种 Kubernetes 对象,但挑战在于编写它们时是否遵循最佳实践?我们使用...

    iMike
  • 比官方K8S Dashboard好用的几个工具

    一个很有意思的小工具叫 kubeman,它试图使从Kubernetes集群中查找信息变得更加容易,并且可以调查与Kubernetes和Istio相关的问题。

    SY小站
  • K8S 生态周报| 2019-07-08~2019-07-14

    「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。本周为什么发布时间比往常迟呢?因为上周我...

    Jintao Zhang
  • 使用 Elasticsearch Operator 快速部署 Elasticsearch 集群

    随着 kubernetes 的快速发展,很多应用都在往 kubernetes 上面迁移,现阶段对于无状态应用的迁移是非常容易做到的,但是对于有状态应用的迁移还是...

    我的小碗汤

扫码关注云+社区

领取腾讯云代金券