前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes 应用性能分析工具 - Kubectl Flame

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

作者头像
我是阳明
发布2021-03-01 11:02:04
发布2021-03-01 11:02:04
72100
代码可运行
举报
文章被收录于专栏:k8s技术圈k8s技术圈
运行总次数:0
代码可运行

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

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

上图中每个矩形都是一个函数,其中宽度显示它出现的频率,从左到右的排序并不重要。

Kubernetes 上的性能分析

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

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

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

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

kubectl flame

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

安装

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

代码语言:javascript
代码运行次数:0
运行
复制
kubectl krew install flame

运行原理

kubectl-flame 通过在与目标容器相同的节点上启动一个探查器来启动性能分析,大多数探查器将与目标容器共享一些资源:比如通过将 hostPID 设置为 true 来启用 PID 命名空间共享,通过挂载 /var/lib/docker 并查询 overlayFS 来启用文件系统共享。在后台kubectl-flame使用 async-profiler 来为 Java 应用程序生成火焰图,通过共享/tmp文件夹与目标 JVM 进行交互,Golang 则支持基于 ebpf 分析,Python 支持基于 py-spy 进行分析。

kubectl flame 概述

分析 Kubernetes Pod

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

代码语言:javascript
代码运行次数:0
运行
复制
kubectl flame mypod -t 1m --lang java -f /tmp/flamegraph.svg

分析基于 alpine 的容器

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

代码语言:javascript
代码运行次数:0
运行
复制
kubectl flame mypod -t 1m -f /tmp/flamegraph.svg --lang Java --alpine

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

分析 sidecar 容器

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

代码语言:javascript
代码运行次数:0
运行
复制
kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg mycontainer

“源码仓库地址:https://github.com/VerizonMedia/kubectl-flame ”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 k8s技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernetes 上的性能分析
  • kubectl flame
    • 安装
    • 运行原理
    • 分析 Kubernetes Pod
    • 分析基于 alpine 的容器
    • 分析 sidecar 容器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档