lvmetad内存泄露问题处理

问题背景

lvmetad是操作系统上面的lvm的缓存服务,基本上所有的操作系统上面都有,我们使用的操作系统版本为

1
2
3
4
5
6
7
8
[root@node232 ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core
[root@node232 ~]# uname -a
Linux node232 4.14.113-1.el7.x86_64 #1 SMP Wed Sep 9 17:22:41 CST 2020 x86_64 x86_64 x86_64 GNU/Linux

lvm版本为

1
2
3
[root@node232 ~]# rpm -qa|grep lvm
lvm2-libs-2.02.180-8.el7.x86_64
lvm2-2.02.180-8.el7.x86_64

如果环境为上面的版本,重点关注一下,通过检查下top看下内存是否有下面的问题

相关问题

https://sourceware.org/git/?p=lvm2.git;a=commit;h=bcf9556b8fcd16ad8997f80cc92785f295c66701

确认当前使用版本存在这个问题

复现步骤

反复查询触发问题

1
2
3
4
5
6
7
[root@lab103 ~]# cat lvmleak.sh 
#!/bin/bash
while :
do
pvs
sleep 1
done

执行一个记录内存的脚本

1
2
3
4
5
6
7
8
9
[root@lab103 ~]# cat jilu.sh 
#! /bin/bash
while :
do
mydate=`date`
mymem=`cat /proc/7194/status |grep VmRSS`
echo $mydate $mymem
sleep 5
done

7194为lvmetad的pid


可以看到内存是持续增加的,每次一点点

处理方法

临时释放内存

1
[root@lab103 ~]# systemctl restart lvm2-lvmetad

如果环境是不好传包的,就直接重启下,这个内存累积的还比较慢,可以先重启处理掉
如果卡住,就再换一个终端,kill掉lvmetad进程即可

升级lvm解决问题
比较代码

可以看到后面的版本已经解决了这个问题了

1
2
3
4
5
6
device-mapper-1.02.170-6.el7_9.5.x86_64.rpm       
device-mapper-event-libs-1.02.170-6.el7_9.5.x86_64.rpm
lvm2-2.02.187-6.el7_9.5.x86_64.rpm
device-mapper-event-1.02.170-6.el7_9.5.x86_64.rpm
device-mapper-libs-1.02.170-6.el7_9.5.x86_64.rpm
lvm2-libs-2.02.187-6.el7_9.5.x86_64.rpm

一共需要更新6个包

wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/

这个路径里面下载

1
rpm -Uvh *.rpm

默认情况下会保留之前的lvm配置文件,不会进行替换,所以没有问题,不需要其它操作

重启进程生效

1
[root@lab103 ~]# systemctl restart lvm2-lvmetad

如果卡住,就再换一个终端,kill掉lvmetad进程即可
升级后

可以看到问题解决