k8s上worker某节点上cpu占用相对其他都很高,如何排查?
1.分析是否pod占用cpu过高
1.1通过监控确定是否是pod cpu占用过高
//pod按照cpu使用情况降序
kubectl top pods --all-namespaces --sort-by=cpu
//检查pod是否存缺失资源限制(resources/requests/limits)
kubectl describe pod <pod-name> -n <namespace>
1.2查看对应pod有没有resouece cpu/memory limit
- 没有限制,则为了系统稳定性添加限制,进一步分析pod内进程为什么导致cpu过高
关键是找到启动日志,分析是是错误导致的还是系统内程序逻辑不合理导致的cpu占用过高
- 容器内进程占用了较多的CPU,通过对应工具分析
- pprof go
- jstack java
- pref linux
2.分析是否系统进程导致的还是kubelet进程导致的
top观察进程cpu占用情况
top
-C //根据cpu使用情况排序
观察wa是否存在io等待,存在说明磁盘存在性能问题。(iostat -x 1)
检查服务日志及开机自检日志
journalctl -u kubelet -f -n 100 --no-pager
journalctl -u docker -f -n 100 --no-pager
dmesg