如何排查Linux slab_unreclaimable内存占用高的原因?

你好 我的生产一个机器 200G 内存,部署了其他分布式文件存储系统客户端,最后发现
内存占用150,kill进程后也无法释放,必须重启机器解决。
寻找top 内存时候发现
slabtop SUnreclaim: 占用135G,其中task_strcut占用130,如何解决。

无法部署其他服务。

lab_unreclaimable内存为系统不可回收的内存,当其占用总内存的比例过高时,将会影响可用内存与系统性能。本文介绍如何排查Linux slab_unreclaimable内存占用高的原因。

问题现象

在Linux实例内运行cat /proc/meminfo | grep "SUnreclaim"命令查看SUnreclaim参数指标时,发现内存较大(例如SUnreclaim: 6069340 kB),当该内存超过系统总内存大小的10%时,系统可能会存在slab内存泄漏。

可能原因

slab内存是内核组件(或驱动)通过调用kmalloc类接口向伙伴系统申请内存,然后内核组件(或驱动)没有正确释放内存所产生的。实例一旦出现slab内存泄漏,且无法通过kill进程的方式回收内存,则只能通过重启实例解决。

slab内存泄漏会导致实例上运行的业务可用内存变少、内存碎片化,还会引起系统OOM Killer以及系统性能抖

1 个赞

您好,这个是什么情况下发生的?部署的是 TiDB、TiKV 还是 PD 呢?
还有混部了什么文件存储系统的客户端呀?

还有我看您这里应该是复制的某篇文章的内容:

lab_unreclaimable内存为系统不可回收的内存,当其占用总内存的比例过高时,将会影响可用内存与系统性能。本文介绍如何排查Linux slab_unreclaimable内存占用高的原因。

能给一下文章的链接嘛?

这个是部署beegfs存储客户端,没有部署tidb服务,因为服务存在问题,不敢部署tidb。搜索 如何排查Linux slab_unreclaimable内存占用高的原因?

https://help.aliyun.com/document_detail/316787.html

今天有验证了,自己写shell 不停执行一个命令 不会造成task增加,但是自己执行beegfs客户端命令就会执行 beegfs相关信息。

  1. slabtop 查看 task_struct 占用130G,越来越多
    特别说明这个走IB网络 Release Notes v7.3.1 — BeeGFS Documentation 7.3.1

  2. BeeGFS的客户端是由一个内核模块和两个系统服务组成的

有人知道如何开启 ```
CONFIG_SLUB_DEBUG

是否可以看看 到 beegfs 相关的论坛求助一下?