暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 麒麟v10 lsm内存泄漏问题处理

原创 由迪 2023-09-27
1420

原作者:黄宸宁

适用范围

银河麒麟高级服务器操作系统(飞腾版)V10(SP1)0711

银河麒麟高级服务器操作系统(鲲鹏版)V10(SP1)0711

银河麒麟高级服务器操作系统(兆芯版)V10(SP1)0711

银河麒麟高级服务器操作系统(海光版)V10(SP1)0711

银河麒麟高级服务器操作系统(飞腾版)V10(SP1)0518

银河麒麟高级服务器操作系统(鲲鹏版)V10(SP1)0518

银河麒麟高级服务器操作系统(兆芯版)V10(SP1)0518

银河麒麟高级服务器操作系统(海光版)V10(SP1)0518

银河麒麟高级服务器操作系统(飞腾版)V10(SP2)0524

银河麒麟高级服务器操作系统(鲲鹏版)V10(SP2)0524

银河麒麟高级服务器操作系统(兆芯版)V10(SP2)0524

银河麒麟高级服务器操作系统(海光版)V10(SP2)0524

问题概述

在麒麟V10版本中,lsm堆栈化功能存在内存泄露问题。

关于Linux LSM

Linux内核安全模块(Linux Security Module,LSM)是一种内核级别的安全框架,它允许开发人员和系统管理员通过实现安全策略和访问控制决策的模块来扩展Linux内核的安全性能。通过LSM接口,可以实现各种安全策略,比如强制访问控制(MAC)、可选访问控制(DAC)、进程间通信(IPC)和网络安全等。

问题原因

在内核LSM堆栈化时,给每个内核对象如inode、cred等分配了相关的安全域内存,并同时给每个安全模块在对应的安全域中分配所需的内存来保存该模块的安全数据,但是在内核对象释放时其安全域数据没有得到有效释放,导致内存泄露。

影响:在开启安全的情况下会导致内存泄露,长时间会影响系统稳定性运行。

问题现象

  1. 查看系统内存使用情况
free -g
  1. 排除是否是MogDB内存参数设置,导致的内存使用过高

查看MogDB共享内存的占用空间

ipcs -m

通过top查看MogDB进程内存使用情况

top

如果MogDB使用的内存远低于主机used的使用大小,说明主机内存使用过高,与MogDB无关。

如果MogDB使用的内存接近主机used的使用大小,需要查看MogDB shared buffers设置和shared_buffers的使用情况,排除是由于MogDB内存参数设置过高,导致的内存使用过高。

show shared_buffers; select * from gs_total_memory_detail;
  1. 排除MogDB对内存使用过高的影响后,分析主机内存的使用情况

通过以下命令,来查看内存使用中slab的增长情况:

for i in {1..10}; do cat /proc/meminfo|grep Slab; sleep 10; done

如果slab内存一直在线性增长的趋势,通过下面的命令查看slab的内容:

cat /proc/slabinfo |awk '{print $1,$3*$4/1024/1024}'|sort -k2 -gr|head -10|awk 'BEGIN {printf "%-25s %10s\n","slab-obj-list","use-mem_MB"}{printf "%-25s %10s\n",$1,$2}'

会发现SLAB内存主要为kmalloc-96函数申请占用,kmalloc-96 为 Linux 内核专用内存分配器, 用户进程不可用。

解决方案

规避方案:

去掉grub参数”security=xxx”,或者将其改成”security=”。

解决方案:

升级内核(Version 4.19.90-23.16.v2101)。

【注意事项】

1、规避方案:改/boot/grub下的文件需要重启,直接在系统启动时grub界面上改就不需要重启;

2、升级内核后需重启;

参考文档

https://www.kylinos.cn/support/update/10.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论