在Docker容器中运行Linux Perf工具是否可行?

14
我尝试在容器中运行以下命令,遇到了下面的问题,可能是由于“-moby”内核版本引起的。我们能否获得一个没有单词“-moby”的docker镜像,而不是在Linux内核版本中出现它。
我尝试在安装 Ubuntu 的虚拟机上安装 Linux perf 工具,并成功了。
#docker run -t -i ubuntu:14.04 /bin/bash

root@214daea94f4f:/# perf

WARNING: perf not found for kernel 4.9.41

You may need to install the following packages for this specific kernel:

linux-tools-4.9.41-moby
linux-cloud-tools-4.9.41-moby

You may also want to install one of the following packages to keep up to date:

linux-tools-moby-lts-<series>
linux-cloud-tools-moby-lts-<series>

你有在主机上运行的perf版本吗?可能可以在容器上运行它。 - Mark Plotnick
你需要在Docker虚拟机上运行perf,而我不认为alpine有适用于它的软件包 - Matt
@MarkPlotnick,我已经在主机上成功运行了perf,但是我不想将perf二进制文件复制到容器中并运行它。我的目标是创建一个Docker镜像,在任何机器上都可以构建并运行perf。 - Rupesh
Rupesh,请检查您的Linux系统中是否有任何linux-tools-*软件包,如果有,请安装它,并获取该软件包的文件列表。然后,使用真正的perf二进制文件替换这个错误的Debian封装脚本/usr/bin/perf,该脚本在搜索uname -r perf时会生成错误的"May need..."消息。任何perf二进制文件 (/usr/lib/linux-tools/*/perf) 都可以与任何内核版本一起使用(perf_events API 双向兼容),但在旧工具上其功能会受到限制。要构建perf软件包,您可以构建Linux内核或按照Debian方式进行操作(apt-get source linux-image...., https://wiki.debian.org/BuildingTutorial)。 - osgx
3个回答

13

只要去做

apt-get install linux-tools-generic

并创建一个指向 /usr/bin/perf 的符号链接。(在我的情况下):

ln -s /usr/lib/linux-tools/3.13.0-141-generic/perf /usr/bin/perf

对我起作用了!


2
这并没有涵盖全部的复杂性。以下是一些额外需要担心的事情:https://dev59.com/0FkT5IYBdhLWcg3wMMyr; https://dev59.com/vVcP5IYBdhLWcg3wL3YN。此外,如果您想查看进程详细信息而不是一个大的`[Unknown]`列表等,则需要在主机pid命名空间中运行。 - Valer

2

2

如果您想在像Docker这样的容器中运行perf,您需要遵循以下步骤:

  1. 保持perf版本与主机相同(可以将主机上的perf挂载到docker中)
  2. 在运行Docker时使用“--privileged”选项(还有其他方法可以实现,但这是最简单的方法)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接