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

相关文章

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用