最常用有效的方法是进容器用 top 或 ps 查资源占用:top 可实时按 CPU(P)或内存(M)排序,ps aux 结合 --sort 参数快速获取前 10 高耗进程;配合 docker stats 先筛选高负载容器,再结合 docker inspect 获取 PID,在宿主机用 ps、lsof、strace 深度追踪。

直接进容器用 top 或 ps 查,是最常用也最有效的办法。
进容器后用 top 实时排序
执行命令即可动态观察:
docker exec -it <container_id> top- 进去后按 P 按 CPU 使用率降序,按 M 按内存降序
- 重点关注 %CPU 和 %MEM 列,数值高的进程就是资源大户
用 ps aux 一次性快照排序
适合快速抓取当前最高消耗进程:
-
docker exec <container_id> ps aux --sort=-%cpu | head -10(CPU 前 10) -
docker exec <container_id> ps aux --sort=-%mem | head -10(内存前 10) - 输出含 PID、USER、%CPU、%MEM、VSZ(虚拟内存)、RSS(实际内存)、COMMAND,便于定位具体命令和参数
结合宿主机 PID 追踪更深层信息
当需要查进程打开的文件、网络连接或系统调用时:
- 先获取容器主进程 PID:
docker inspect <container_id> | grep Pid - 在宿主机上查该 PID 的详细行为:
ps -p <pid> -o pid,ppid,cmd,%cpu,%mem,rss,vsz - 进一步用
lsof -p <pid>看文件/端口占用,或strace -p <pid>跟踪系统调用
配合 docker stats 快速圈定目标容器
避免盲目排查,先缩小范围:
- 运行
docker stats --no-stream查所有容器的实时 CPU 和内存占比 - 挑出 CPU % 或 MEM % 明显偏高的容器 ID
- 再对这些容器执行上面的
top或ps操作,效率更高


















