节点高负载
Kubernetes 节点高负载如何排查?本文来盘一盘。
如何判断节点高负载?
可以通过 top
或 uptime
来确定 load 大小,如果 load 小于 CPU 数量,属于低负载,如果大于 CPU 数量 2~3 倍,就比较高了,当然也看业务敏感程度,不太敏感的大于 4 倍算高负载。
排查思路
观察监控:通常不是因为内核 bug 导致的高负载,在卡死之前从监控一般能看出一些问题,可以观察下各项监控指标。
排查现场:如果没有相关监控或监控维度较少不足以查出问题,就尝试登录节点抓现场分析。有时负载过高通常使用 ssh 登录不上,如果可以用 vnc,可以尝试下使用 vnc 登录。
排查现场思路
loadavg 可以认为是 R状态线程数和D状态线程数的总和 (R 代表需要 cpu,是 cpu 负载。 D 通常代表需要 IO,是 IO 负载)
简单判断办法:
ps -eL -o lwp,pid,ppid,state,comm | grep -E " R | D "
然后数一下各种状态多少个进程,看看是 D 住还是 R。
如果是长时间 D 住,可以进一步查看进程堆栈看看 D 在哪里:
cat /proc/<PID>/stack