环境介绍

服务器: 6台ubuntu20.4服务器,72核,256G
集群: 使用Microk8s搭建k8s集群。

问题现象

通过prometheus监控发现有一台服务器的swap分区利用率超过90%,但是内存利用率不到50%。

处理步骤

1、检查节点所在pod资源使用情况

根据以往经验,这种情况大部分是此节点上的pod配置了resources.limits 已经不满足现在的业务需求,导致此pod开始大量使用Swap分区的资源。
使用kuboard工具查看此node上的pod资源情况,发现居然没有哪一个pod配置了资源限制,最多就是配置了资源请求。那么排除因为pod资源限制引起的问题。

2、检查内核参数swappiness

cat /proc/sys/vm/swapiness
60 #系统默认,此参数值越高,表示越积极使用swap分区。

猜测可能是这个值太高,调整低一点。

sysctl vm.swappiness=10

结果发现没有swap分区没有回落,排除swappiness的影响。

3、只有使用笨办法,查看Node上所有进程占用swap的情况

使用top命令查看了此服务器上mongodb占用的内存最多,那就先从他下手cat /proc/{PID}/smaps | grep ‘Swap’ 发现所有页加起来不到20M。那么排除mongodb引起的。开始老老实实查看每个进程占用情况:

说到这里,要感谢51上的大佬。使用这个命令直接打印出,PID和对应的占用swap分区的总和。

for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr

直接定位是那些进程占用最多。
找到了这里,就好处理多了,我们这里找出来是我们自己的一个微服务引起的,所以直接交给开发处理。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐