systemd-cgtop 不直接识别 Kubernetes 命名空间,但可通过 kubelet 创建的 cgroup 路径(如 /kubepods-burstable-pod.slice)映射 Pod UID 到命名空间,进而按 CPU 百分比分析各 Pod 或 QoS 类别的实时 CPU 耗时。

systemd-cgtop 本身不直接识别 Kubernetes 命名空间(namespace),但它能精准反映底层 cgroup 层级中由 kubelet 创建的资源分组——这正是分析“集群内各命名空间 CPU 耗时”的实际入口。
CPU耗时对应的是cgroup层级,不是K8s namespace本身
Kubernetes 不在内核层面创建命名空间对应的 cgroup;它通过 kubelet 将 Pod 归入特定 cgroup 路径,典型路径如:
- /kubepods.slice/kubepods-burstable.slice/
- /kubepods.slice/kubepods-besteffort.slice/
- /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod
.slice/
每个 pod
实时查看各Pod级cgroup的CPU使用(即实际耗时)
运行以下命令启动 systemd-cgtop,并按 CPU 使用率排序:
sudo systemd-cgtop -p cpu
观察输出中类似这样的行:
/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podabcd123.slice 14 12.7% 1.4G - -
其中 12.7% 是该 Pod 所有容器进程在当前采样周期内占用的 CPU 百分比(即相对耗时占比),数值越高,说明该 Pod 在单位时间内消耗 CPU 越多。
快速关联Pod UID与K8s namespace
若已知目标 namespace(例如 prod-app),可用以下命令批量提取其下所有 Pod 对应的 cgroup 路径:
- 列出该 namespace 下所有 Pod UID:
kubectl get pods -n prod-app -o jsonpath='{.items[*].metadata.uid}' | tr ' ' '\n' - 在 cgtop 输出中过滤(或用脚本匹配):
sudo systemd-cgtop -p cpu | grep "podabcd123"
也可直接监控整个命名空间的聚合效果——例如所有 burstable Pod 共同归属 /kubepods-burstable.slice,其 %CPU 行显示的就是该 QoS 类别下全部 Pod 的 CPU 总和耗时。
注意刷新精度与时间语义
systemd-cgtop 默认每秒刷新一次,显示的是滚动窗口内的平均 CPU 占用率(非绝对毫秒级耗时)。如需更高精度,可缩短刷新间隔:
sudo systemd-cgtop -p cpu -d 200ms
此时 %CPU 字段反映的是最近 200 毫秒内该 cgroup 的 CPU 时间占比,更贴近“实时耗时感知”。但要注意:过短间隔可能放大瞬时抖动,建议结合 systemctl show











