加餐02 | 理解perf:怎么用perf聚焦热点函数?
李程远
该思维导图由 AI 生成,仅供参考
你好,我是程远。今天我要和你聊一聊容器中如何使用 perf。
上一讲中,我们分析了一个生产环境里的一个真实例子,由于节点中的大量的 IPVS 规则导致了容器在往外发送网络包的时候,时不时会有很高的延时。在调试分析这个网络延时问题的过程中,我们会使用多种 Linux 内核的调试工具,利用这些工具,我们就能很清晰地找到这个问题的根本原因。
在后面的课程里,我们会挨个来讲解这些工具,其中 perf 工具的使用相对来说要简单些,所以这一讲我们先来看 perf 这个工具。
问题回顾
在具体介绍 perf 之前,我们先来回顾一下,上一讲中,我们是在什么情况下开始使用 perf 工具的,使用了 perf 工具之后给我们带来了哪些信息。
在调试网路延时的时候,我们使用了 ebpf 的工具之后,发现了节点上一个 CPU,也就是 CPU32 的 Softirq CPU Usage(在运行 top 时,%Cpu 那行中的 si 数值就是 Softirq CPU Usage)时不时地会增高一下。
在发现 CPU Usage 异常增高的时候,我们肯定想知道是什么程序引起了 CPU Usage 的异常增高,这时候我们就可以用到 perf 了。
具体怎么操作呢?我们可以通过抓取数据、数据读取和异常聚焦三个步骤来实现。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
文章介绍了如何使用perf工具来解决容器中的网络延时问题。首先回顾了在调试网络延时问题时使用perf工具的情况,包括抓取数据、数据读取和异常聚焦三个步骤。然后详细介绍了perf工具的概念和工作机制,包括不同类型的event和计数和采样两种工作方式。在容器中使用perf时需要注意perf版本和内核版本匹配,以及解决权限问题。最后,介绍了在定位CPU使用异常时最常用的方法,并给出了常规步骤和思考题。整体来说,本文通过实际案例和技术细节,帮助读者理解了perf工具的使用方法和工作原理,使读者能够更好地利用perf工具来解决类似的性能问题。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《容器实战高手课》,新⼈⾸单¥59
《容器实战高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- chong chong老师好,如果容器使用cpu share,在容器内perf看到的是宿主机信息,异常有可能是业务之间干扰导致。所以,最好是在宿主机上使用perf,我的理解对不?
作者回复: 如果可以登陆宿主机,当然在宿主机上运行perf是最理想的。
2021-02-255 - 徐少文老师好,如果想在主机上做容器内进程的监控,直接在host上利用perf工具去获取容器的系统调用序列,这样的方法是可行的吗?
作者回复: @徐少文 这样是可以的,在host pid namespace下可以看到容器中进程的pid, 你可以用perf trace对应的pid看到这个进程的系统调用。
2021-02-014 - 超级芒果冰perf 的常规步骤中,out.sv 是什么文件,需要用什么软件打开
作者回复: 可以直接用浏览器打开
2022-01-151 - lyonger在容器中使用的话,限制有点多。线上业务直接perf,对线上可能会有影响?
作者回复: 肯定有影响,需要根据实际情况决定是否执行。
2021-09-181 - 光请教下k8s里面上下文切换和中断比较严重导致负载高。这如何处理啊
作者回复: 可以看一下 /proc/interrupts 和 /proc/softirqs ,或者用BCC的工具 hardirqs, softirqs 看一下哪种中断的次数或者耗时比较高。
2021-03-181 - 李雪Dear teacher, can I use the following command to monitor each container's events"perf stat -a -e cpu-clock,context-switches,cpu-migrations,page-faults,cycles,instructions,branches,branch-misses -G kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod${podID}.slice/docker-${dockerID}.scope -o perf_containers.csv --append -I 30000 sleep 30s" or use "perf stats --pid ${docker_pid}" is better? Thanks.
作者回复: If you want to perf monitor all processes under a container, then "-G cgroup_name" is easier. "--pid" need to list all pids under a container.
2022-03-15 - closer这几章都比较底层,作为运维人员,需要前置学习那些知识点,很多知识点都是盲点2021-02-011
收起评论