本文主要是介绍kube-apiserver内存占用过多 go tool pprof 入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 环境
- 问题
- 排查
- 1、kube-apiserver %CPU 146 正常,%MEM 高达70,,load average 400+,出现kswapd0进程。
- 2、k describe node 看到 SystemOOM
- 3、是否大量连接导致?
- 4、通过prom查看指标
- 5、访问K8s API
- 6、pprof 火焰图
- 解决方案
- 1、prometheus 配置GOMEMLIMIT参数,limit的一半
- 2、kube-apiserver优化?
环境
K8s:v1.18
OS:Kylin v10 (Tercel) 4.19.90-23.8.v2101
docker:19.3.15
CPU:kunpeng-920 16c64g
问题
节点NotReady,SystemOOM。
排查
1、kube-apiserver %CPU 146 正常,%MEM 高达70,,load average 400+,出现kswapd0进程。
2、k describe node 看到 SystemOOM
ContainerGCFailed - 容器垃圾数据收集失败。
SystemOOM - System OOM encountered, victim process: prometheus
journalctl --no-pager --unit kubelet | grep "sys oom"docker stats --no-stream |grep -E 'kube-apiserver|prometheus'
https://cloud.tencent.com/developer/article/2289874
3、是否大量连接导致?
netstat -nat | grep -i "6443" | wc -l
ss -nat | grep -i "6443" | wc -l
如何解决“kube-apiserver 负载不均衡的问题”
Nginx四层代理
4、通过prom查看指标
apiserver_request_duration_seconds_bucket
apiserver_request_total
kube-apiserver组件监控指标及大盘使用说明
5、访问K8s API
kubectl proxy --disable-filter --address='0.0.0.0':&
kubectl proxy 运行Kubectl的机器和kubernets apiserver之间的一个反向代理
curl 127.0.0.1:8001/metrics |grep apiserver_request_duration_seconds_bucket|morecurl 127.0.0.1:8001/metrics |grep apiserver_request_total|more
6、pprof 火焰图
go tool pprof -http=0.0.0.0:30065 127.0.0.1:8001/debug/pprof/profile?seconds=300go tool pprof --http=0.0.0.0:30065 x.x.x.:8001/debug/pprof/heapcurl 127.0.0.1:8001/debug/pprof/profile?seconds=300 > api.profile
使用pprof对程序进行性能剖析
解决方案
1、prometheus 配置GOMEMLIMIT参数,limit的一半
Go内存优化与垃圾收集
2、kube-apiserver优化?
1)参数-解决gc慢
2)负载不均衡
这篇关于kube-apiserver内存占用过多 go tool pprof 入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!