最准确轻量的方式是直接监控 dockerd 进程:用 pgrep dockerd 获取 PID,再通过 top -p、ps -o 或 htop -p 实时查看其 %cpu、%mem、rss 等核心资源指标,并结合 systemctl 状态、journal 日志及 /var/run/docker.sock 健康检查综合判断异常。
直接监控 dockerd 进程本身,而不是容器或 api 接口——这是最准确、最轻量的方式。
用系统命令实时查看 dockerd 进程资源
守护进程(dockerd)是一个标准 Linux 进程,其 CPU 和内存占用可直接通过系统工具观测:
- 查 PID:
pgrep dockerd或systemctl show --property MainPID docker - 看实时占用:
top -p $(pgrep dockerd)或htop -p $(pgrep dockerd) - 快照式统计:
ps -o pid,ppid,%cpu,%mem,rss,vsz,comm -p $(pgrep dockerd)
重点关注 %cpu(CPU 使用率)、%mem(内存占比)、rss(实际物理内存,单位 KB),避免只看 vsz(虚拟内存,含映射但不反映真实压力)。
结合 systemd 状态与日志辅助判断异常
CPU 或内存持续偏高,往往伴随 daemon 健康问题,需联动验证:
- 检查服务状态:
systemctl is-active docker和systemctl is-failed docker - 观察启动延迟或重启频率:
systemctl list-journal-boots+journalctl -u docker --since "24 hours ago" | grep -i "restart\|oom\|killed" - 确认 socket 是否响应:
timeout 2 bash -c 'echo > /var/run/docker.sock' && echo "socket alive" || echo "socket unresponsive"
若 dockerd 内存 RSS 持续增长(如数小时内上涨超 300MB 且不回落),大概率存在 goroutine 泄漏或事件积压,需配合 curl --unix-socket /var/run/docker.sock http://./debug/pprof/heap 抓取堆快照分析。
集成进统一监控体系的推荐方式
生产环境不建议仅靠人工命令,应将 dockerd 进程指标纳入现有采集链路:
- 使用 Node Exporter 的
process_exporter子模块,配置匹配name="dockerd"的进程规则,暴露process_resident_memory_bytes和process_cpu_seconds_total - 在 Prometheus 中写告警规则,例如:
10m avg_over_time(process_resident_memory_bytes{job="node", process_name="dockerd"}[1h]) > 800 * 1024 * 1024(持续一小时均值超 800MB) - 避免用
docker stats查dockerd:它只对容器生效,对守护进程无效
不需要额外安装 Docker 插件或修改 daemon 配置,纯系统级观测更稳定、干扰更小。


















