kube-apiserver内存占用过多 go tool pprof 入门

2024-05-27 05:04

本文主要是介绍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 入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1006565

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在