You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EKS节点中dockerd高CPU占用问题排查咨询

排查AWS EKS节点dockerd高CPU占用的思路

结合你给出的节点信息和top输出,dockerd占了242.9%的CPU,节点负载也处于较高水平(load average 8+),既然内存和磁盘都正常,可以从这些方向入手排查:

可能的核心原因

  • 容器频繁创建/销毁:如果节点上有Pod反复重启(比如健康检查失败、应用崩溃),dockerd会不断处理容器创建、销毁、镜像拉取/清理的循环操作,直接拉高CPU
  • 容器日志爆炸:某个容器疯狂输出日志(比如误开debug级别日志、程序报错循环打日志),dockerd负责收集和写入这些日志,大量IO处理会消耗大量CPU
  • Docker版本过旧:你使用的docker://18.6.1是2018年的老版本,存在不少已知的性能bug,比如特定场景下的内存泄漏、CPU占用异常飙升
  • 存储驱动性能瓶颈:如果用了aufs这类老旧存储驱动,或者overlay2配置不当,dockerd在处理镜像层、容器文件系统时会额外消耗CPU
  • CNI网络插件交互异常:Calico/Flannel等网络插件和dockerd的通信出现问题,比如频繁发送网络配置请求,也会导致dockerd CPU占用过高

具体排查步骤

  1. 先排查容器层面的异常

    • 执行docker stats实时查看所有容器的资源占用,重点关注有没有容器的NET I/O/BLOCK I/O异常高,或者状态频繁变化
    • 用kubectl get pods -o wide | grep <你的节点IP>检查节点上的Pod,看是否有高重启次数(RESTARTS列数值大),这类Pod会让dockerd反复执行容器生命周期操作
  2. 分析dockerd自身日志

    • 执行journalctl -u docker -f实时查看dockerd日志,看是否频繁出现pulling image、creating container、removing container这类重复操作,或者存在镜像拉取失败、容器启动报错等信息
  3. 检查容器日志输出情况

    • 进入容器日志目录(通常是/var/log/containers/),用ls -lh查看哪个日志文件增长最快,或者直接tail -f <日志文件名>,确认是否有容器在疯狂输出日志
  4. 验证存储驱动配置

    • 执行docker info | grep Storage Driver,如果是aufs,建议换成overlay2(Amazon Linux 2默认支持overlay2,性能更优);如果已经是overlay2,检查磁盘挂载是否有异常
  5. 查看Kubelet与dockerd的交互

    • 执行journalctl -u kubelet -f,观察Kubelet是否频繁向dockerd发送容器创建/销毁请求,比如因Pod调度频繁、健康检查失败导致的重复操作
  6. 考虑升级Docker版本

    • 18.6.1确实过于老旧,AWS EKS有对应K8s版本(1.12.7)的兼容Docker版本列表,你可以升级到19.03.x这类较新版本,很多老版本的性能问题已经被修复
  7. 深入分析dockerd线程

    • 用top -H -p 5028(你的dockerd PID是5028)查看dockerd的各个线程CPU占用,找到占用最高的线程,再结合strace -p <线程PID>分析该线程的具体操作(比如是否在频繁读写文件、网络通信)

临时缓解措施

如果暂时没法彻底排查,可以先驱逐节点上的Pod到其他节点:

kubectl drain <节点名> --ignore-daemonsets

然后重启dockerd:

systemctl restart docker

观察CPU是否能降下来,这也能验证是否是临时负载导致的问题

内容的提问来源于stack exchange,提问作者zangw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:05:14