已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景 我做了 8 年运维,现在维护一个 12 节点(16C64G,Kubernetes 1.28.9 + containerd 1.7.13,cgroup v2)的在线业务集群,监控栈是 node-exporter + cAdvisor + Prometheus。
现象
上周值班时告警报某台节点 CPU 使用率 95%(node-exporter 的 node_cpu_seconds_total 算出来的),我立刻去查这台节点上各 Pod 的容器 CPU(cAdvisor 的 container_cpu_usage_seconds_total),把全部容器相加折算成核数,加起来只占了这台机器约 30%(16C 里约 5 核)。剩下 60%+ 的 CPU 好像"凭空消失"了——既不属于任何容器,也不像 kernel 空转。这台节点上除了业务 Pod 还有 kubelet、containerd、calico 等 system 组件。
已尝试的排查与结果
top 看整机,发现 %us 和 %sy 加起来确实很高,但 ps 里排前面的进程多是 kworker、softirq 和几个 system 组件,业务进程占比不高;cpu.stat 里 user 和 system 口径和 node-exporter 不一致,但对了一下,差值远不止内核态这一小块;ps 没看到异常的大进程;期望得到的答案形态 想请教各位有实战经验的:
softirq/kworker 偏高(比如网络/IO 密集),这类"不可见 CPU"在容量规划和告警阈值上你们一般怎么处理?我会把你们给的命令和结论整理成一篇对账笔记,方便后来人直接抄。