perf 分析容器内的进程

先运行 perf record -g -p < pid>,执行一会儿(比如 15 秒)后,按 Ctrl+C 停止。
然后,把生成的 perf.data 文件,拷贝到容器里面来分析:

$ docker cp perf.data phpfpm:/tmp 
$ docker exec -i -t phpfpm bash

接下来,在容器的 bash 中继续运行下面的命令,安装 perf 并使用 perf report 查看报告:

$ cd /tmp/ 
$ apt-get update && apt-get install -y linux-tools linux-perf procps
$ perf_4.9 report

不过,这里也有两点需要你注意。

首先是 perf 工具的版本问题。在最后一步中,我们运行的工具是容器内部安装的版本 perf_4.9,而不是普通的 perf 命令。这是因为, perf 命令实际上是一个软连接,会跟内核的版本进行匹配,但镜像里安装的 perf 版本跟虚拟机的内核版本有可能并不一致。

另外,php-fpm 镜像是基于 Debian 系统的,所以安装 perf 工具的命令,跟 Ubuntu 也并不完全一样。比如, Ubuntu 上的安装方法是下面这样:

$ apt-get install -y linux-tools-common linux-tools-generic linux-tools-$(uname -r))

而在 php-fpm 容器里,你应该执行下面的命令来安装 perf:

$ apt-get install -y linux-perf

threshold 的默认值为 0.5%,也就是说,事件比例超过 0.5% 时,调用栈才能被显示。若只有 0.34%,低于 0.5%,所以看不到对应的调用栈了。
给 perf report 设置一个小于 0.34% 的阈值,。比如执行下面的命令:

$ perf report -g graph,0.3

swapper 在系统初始化时创建 init 进程之后,它就成了一个最低优先级的空闲任务。也就是说,当 CPU 上没有其他任务运行时,就会执行 swapper 。所以,你可以称它为“空闲任务”。

推荐书籍:《性能之巅:洞悉系统、企业与云计算》
推荐网站:http://www.brendangregg.com/
http://www.brendangregg.com/linuxperf.html

posted @ 2020-10-11 22:06  klvchen  阅读(866)  评论(0)    收藏  举报