使用 docker stats 命令可以实时查看容器的资源使用情况,其中 cpu 百分比列直接反映了各容器对宿主机的占用程度。要定位占用最高的容器,只需运行该命令并观察输出结果中 %cpu 列数值最大的那一行即可。

如何按 CPU 排序获取前 N 个高负载容器
通过管道将 docker stats 的输出传递给 sort 和 head 命令,可以实现自动排序并筛选出占用 CPU 最高的几个容器。具体做法是结合 --no-stream 参数一次性获取快照数据,避免持续刷新干扰,然后利用 sort -k3 -rn 按第三列(即 %CPU)进行降序排列,最后用 head -n 5 提取前五行结果。

docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}" | sort -k2 -rn | head -n 5
上述命令首先通过 --format 指定输出格式为表格形式,仅包含容器名称和 CPU 使用率两列,去除冗余信息。接着使用 sort -k2 -rn 对第二列(%CPU)进行数值型降序排序,确保高负载容器排在前面。最后通过
docker stats
,并结合日志记录工具保存历史数据。例如,针对名为 web-app 的容器,执行 docker stats web-app 将只显示该容器的实时统计信息,便于聚焦分析其性能表现。

docker stats web-app --no-stream > cpu_usage.log 2>&1
该命令将 web-app 容器的单次统计输出重定向至 cpu_usage.log 文件中,同时捕获标准错误输出。虽然 --no-stream 仅提供瞬时快照,但可通过循环调用实现连续采样,如编写 Shell 脚本每隔几秒追加一次数据到日志文件。这种方式适合用于排查间歇性高负载问题,帮助开发者理解容器在不同时间段内的资源消耗模式,从而优化配置或调整业务逻辑。
当多个容器共享同一主机时,如何区分各自 CPU 占比
在多容器共存环境下,每个容器的 %CPU 值是相对于整个宿主机可用核心数计算的独立指标,因此可以直接比较不同容器之间的相对负载水平。例如,若容器 A 显示 45%、容器 B 显示 30%,则说明 A 占用了更多计算资源,即使它们可能运行相同类型的服务。
这种机制使得管理员无需额外配置即可直观判断哪些容器更“吃”CPU,进而决定是否需要扩容、限流或迁移任务。需要注意的是,由于 docker stats 默认每秒刷新一次,短暂峰值可能被平滑处理,建议结合其他监控手段(如 Prometheus + Grafana)获得更精细的时间序列数据。











