Kubernetes Pod应用性能分析工具 Kubectl Flame
source link: https://www.yp14.cn/2021/02/21/Kubernetes-pod%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7-kubectl-flame/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
什么是性能分析?
性能分析
是分析应用程序性能以改善代码段性能的行为。可视化配置文件并快速识别性能问题的最流行方法之一是生成 “火焰图”
。例如下图
y轴是堆栈深度,x轴跨越样本总体。 每个矩形都是一个函数,其中的宽度表示它在配置文件中出现的频率。 从左到右的顺序并不重要(堆栈按字母顺序排序)。
在Kubernetes上如何分析应用性能?
应用性能分析是一项艰巨的任务。 大多数探查器有两个主要问题:
- 需要修改应用程序。 通常,可以通过将标志添加到执行命令或将一些性能分析库导入代码中来实现。
- 由于在性能分析过程中会严重影响性能,因此通常避免在产品中进行性能分析。
在Kubernetes集群中运行的应用程序上执行分析时,甚至更加困难。 需要部署一个包含配置文件修改的新容器映像,而不是当前正在运行的容器。 此外,当应用程序重新启动时,某些性能问题可能会消失,这使调试变得困难。
在Kubernetes应用性能分析解决方案?
Kubernetes 中可以使用 Kubectl Flame
分析 Pod 应用性能。Kubectl Flame
是一个kubectl插件,可以使在Kubernetes中运行的分析应用程序获得流畅的体验,而无需进行任何应用程序修改或停机。 另外,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上测试)
$ kubectl krew install flame
分析 Kubernetes Pod
分析 Java 应用 mypod 1分钟,并在将火焰图保存到 /tmp/flamegraph.svg
$ kubectl flame mypod -t 1m --lang java -f /tmp/flamegraph.svg
分析基于 alpine 操作系统的容器
在基于 alpine 的容器中分析 Java 应用程序需要使用 --alpine
标志
$ kubectl flame mypod -t 1m -f /tmp/flamegraph.svg --lang Java --alpine
注意:仅 Java 应用程序需要此
--alpine
标志,而Go
分析则不需要该标志。
分析 sidecar 容器
包含多个容器的 Pod 需要将目标容器指定为参数
$ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg mycontainer
分析 Golang 多进程容器
在包含多个进程的Pod中对Go应用程序进行性能分析需要通过 --pgrep
标志指定目标进程名称:
$ kubectl flame mypod -t 1m --lang go -f /tmp/flamegraph.svg --pgrep go-app
Java分析假定进程名称为java。
--pgrep
如果您的进程名称不同,请使用标志。
Recommend
-
118
I got sick of typing the same kubectl commands over and over again so here is my simplified TUI wrapper, kk. Installation go get -u github.com/golang/dep/cmd/dep go get -d -u github.com/nii236...
-
75
kubectl 是日常访问和管理Kubernetes集群最为常用的工具。 当我们使用kubeadm成功引导启动(init)一个
-
48
今天,我们高兴地宣布Kubernetes 1.14版本的正式亮相,这亦是我们在2019年当中进行的首次发布! Kubernetes 1.14版本由31项增强功能组成,具体包括:10项稳定版功能,12项beta测试功能,以及7项全新功能。此次版本的核心主题在于...
-
35
README.md kubectl dig Deep kubernetes visibility from the kubectl.
-
44
我们知道在使用 Kubernetes 的过程中,kubectl 工具可能是最常用的工具了(可能还没有之一),所以当我们花费大量的时间在使用 kubectl 上面的时候,那么我们就非常有必要去了解下如何高效的使用它了。 本文包含一系列提示和技巧,可以让你更加高效的使用...
-
52
1.简介k8s的APIServer提供了RESTful风格的网关接口,允许用户通过这个接口向k8s集群发起请求。如创建一个Pod或销毁一个Pod等操作用户可以通过编程语言遵循APIServer提供的网关接口规范和APIServer进行通信,也可以通过k8s自带的kubectl命令和APIServer进行通信,或者...
-
30
现如今,Kubernetes已经完全改变了软件开发方式。Kubernetes作为一个管理容器化工作负载及服务的开源平台,其拥有可移植、可扩展的特性,并促进了声明式配置和自动化,同时它还证明了自己是管理复杂微服务的主要参与者。而Kubernetes之所...
-
47
0x00 文章楔子 BPF( B erkeley P acket F ilter)本质上是一个运行在内核态的虚拟机,使得用户可以在内核中加载运行自定义程序的技术,其构想在1992年通过一篇论文被提出,最初被用...
-
11
安卓性能分析工具Simpleperf详解与应用本文关注三个问题:Simpleperf的工作原始里是什么?Simpleperf该如何使用?它如何在Unity项目上使用?关注Simpleperf的缘由是,虽然一直使用Xcode Intruments 、 Unity profiler 、Perfdog、以及一些自...
-
2
一些实用的 kubectl 工具1 条评论使用 K8S 的话就需要经常用到 kubectl ,有一些实用的小工具能提高我们使用 kubectl 的效率。 我把这些小工具打包放在了
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK