容器/cgroup 中的 perf
更新时间:2026-10-01。把本地 perf 经验搬进容器,常被权限和“到底在采谁”绊倒。
一、权限与内核
容器没有独立内核,perf 事件走宿主;默认严格 paranoid 时容器内操作返回 permission denied,需授予 CAP_PERFMON(较新内核)/SYS_ADMIN 或宿主调整,遵循最小授权、临时开启。
二、作用域
- 容器命名空间限制可见进程;跨容器/宿主采样受权限限制。
- 可按 cgroup 聚合:
perf stat -G <cgroup>,统计整组资源使用,适合多租户核算。 - 事件是否可用还取决于宿主 CPU/内核版本。

三、常见坑
- 以为容器镜像装了 perf 就能用。
- 过宽授权破坏隔离。
- 容器内 PID/符号与宿主映射混淆。
小结
容器 perf 看宿主内核,需显式最小授权,作用域可用 pid 或 cgroup 限定,采样后及时回收。下一篇 perf 常用脚本与别名。
总结
容器没有独立内核,perf 事件走宿主 PMU:默认严格 perf_event_paranoid 下容器内必返回 permission denied,需授予 CAP_PERFMON/SYS_ADMIN 或宿主放宽,且应最小授权、临时开启、采样后回收;命名空间限制了可见进程,跨容器/宿主采样受权限约束,可按 cgroup 用 perf stat -G 聚合整组做多租户核算——装了 perf 不等于能用,事件可用性还取决于宿主 CPU 与内核版本。