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

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

作者头像
YP小站
发布2021-02-26 15:43:45
1.6K0
发布2021-02-26 15:43:45
举报
文章被收录于专栏:YP小站

什么是性能分析?

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

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

在Kubernetes上如何分析应用性能?

应用性能分析是一项艰巨的任务。大多数探查器有两个主要问题:

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

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

在Kubernetes应用性能分析解决方案?

Kubernetes 中可以使用 Kubectl Flame 分析 Pod 应用性能。Kubectl Flame 是一个kubectl插件,可以使在Kubernetes中运行的分析应用程序获得流畅的体验,而无需进行任何应用程序修改或停机。另外,kubectl flame的目标是通过最大程度地降低性能损失来实现生产友好。

源码地址:https://github.com/VerizonMedia/kubectl-flame

运行原理

kubectl flame 在与目标容器相同的节点上启动 Kubernetes Job。在后台kubectl-flame使用async-profiler来为Java应用程序生成火焰图。通过共享/tmp文件夹与目标JVM进行交互。Golang支持基于ebpf分析。Python支持基于py-spy

使用要求

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

安装

代码语言:javascript
复制
$ kubectl krew install flame

使用

分析 Kubernetes Pod

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

代码语言:javascript
复制
$ kubectl flame mypod -t 1m --lang java -f /tmp/flamegraph.svg

分析基于 alpine 操作系统的容器

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

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

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

分析 sidecar 容器

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

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

分析 Golang 多进程容器

在包含多个进程的Pod中对Go应用程序进行性能分析需要通过 --pgrep 标志指定目标进程名称:

代码语言:javascript
复制
$ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg --pgrep go-app

Java分析假定进程名称为java。--pgrep 如果您的进程名称不同,请使用标志。

参考链接

  • https://github.com/VerizonMedia/kubectl-flame
  • https://blog.csdn.net/weixin_26746861/article/details/108935182
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是性能分析?
  • 在Kubernetes上如何分析应用性能?
  • 在Kubernetes应用性能分析解决方案?
  • 运行原理
  • 使用要求
  • 安装
  • 使用
    • 分析 Kubernetes Pod
      • 分析基于 alpine 操作系统的容器
        • 分析 sidecar 容器
          • 分析 Golang 多进程容器
          • 参考链接
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档