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

浙公网安备 33010602011771号