GreatSQL社区

搜索

[已解决] mysql占用内存不释放,并且一直缓慢增长

4430 14 2022-12-19 12:41

各位老师好,有如下问题需要请教。

问题描述:

主机:256GB内存
单机多实例部署的mysql,单机大概有25个mysql实例,每个实例buffer pool配置2GB。
目前有一个mysql实例占用内存一直不释放(挺长时间了),并且 一直有缓慢增长的趋势。
top信息如下:

cat /proc/../status如下:


数据库全局内存配置如下:


线程级别的内存配置如下:


performance_schema占用内存如下:

show engine  performance_schema status;
| performance_schema | performance_schema.memory   | 507107512 |


数据库连接信息描述如下:
数据库连接中包含大量的Sleep线程,在860个左右(上下浮动不超过3个)。wait_timeout设置的半分钟。

问题:
① mysql占用内存不释放,并且缓慢增长,这种现象是不是内存泄漏?
② 产生这种现象的原因可能是什么?和大量的sleep连接未释放有没有联系?该怎么排查?
③ 线程级别的内存,是只要有连接就会分配,还是使用到的时候再去分配呢?用完了是否会主动释放呢(在Sleep状态下)?
④ 该此类问题有什么解决办法吗?

全部回复(14)
四马路刚子 2022-12-19 15:40:18
遇到过跟你类似的情况,貌似是mysql是用了glibc管理内存有某些缺陷,在某些操作时,占用内存会不释放,比如增减分区啥的,你的环境有大量增减分区的操作吗?
李努力 2022-12-19 16:03:13
四马路刚子 发表于 2022-12-19 15:40
遇到过跟你类似的情况,貌似是mysql是用了glibc管理内存有某些缺陷,在某些操作时,占用内存会不释放,比如 ...

你说的是分区表吗?没有分区表的。
四马路刚子 2022-12-19 16:26:32
李努力 发表于 2022-12-19 16:03
你说的是分区表吗?没有分区表的。

可以监控一下内存是在哪些时段增长的,然后看一下这个时间段具体都进行了哪些操作,貌似大事物也会导致内存增长
李努力 2022-12-19 16:37:28
四马路刚子 发表于 2022-12-19 16:26
可以监控一下内存是在哪些时段增长的,然后看一下这个时间段具体都进行了哪些操作,貌似大事物也会导致内 ...

是缓慢增长的,并不是一下突然升高的。
xryz 2022-12-21 16:46:32
单个线程级别内存最大占用272M,理论上线程级别的内存是关闭就会释放的,但实际上只是在mysql内部释放并没有释放给操作系统,然后重复利用。可以通过pmap查看一下mysql线程是否有很多的匿名块。
土豆娃娃呀 2022-12-21 18:05:57
可以先确认一下内存分配器是什么,lsof -p <PID> | grep malloc ,如果没有结果,说明是使用的glibc,有结果则是对应输出的内存管理器。官方默认的glibc存在内存泄漏问题,在bugs.mysql.com中能搜到。解决方法是替换成jemolloc的内存管理器。
另外,如果使用的是glibc,在x86环境下,可以使用命令gdb --batch --pid <PID> --ex 'call malloc_trim(0)'来释放内存,执行命令后的确有内存释放,则可以进一步说明存在内存泄漏,生产环境命令慎用。
李努力 2022-12-21 19:06:23
本帖最后由 李努力 于 2022-12-21 19:10 编辑
xryz 发表于 2022-12-21 16:46
单个线程级别内存最大占用272M,理论上线程级别的内存是关闭就会释放的,但实际上只是在mysql内部释放并没 ...

您好,这个线程级别的,是不是只有连接断开的话mysql内部才会释放,sql语句执行完了(也就是sleep状态下)并不会去释放?而且释放后不会归还操作系统?我理解的没问题吧
李努力 2022-12-21 19:06:51
土豆娃娃呀 发表于 2022-12-21 18:05
可以先确认一下内存分配器是什么,lsof -p  | grep malloc ,如果没有结果,说明是使用的glibc,有结果则是 ...

您好,用的glibc的。。gdb这个测试了一下,感觉会把进程干掉啊
土豆娃娃呀 2022-12-22 09:58:36
李努力 发表于 2022-12-21 19:06
您好,用的glibc的。。gdb这个测试了一下,感觉会把进程干掉啊

一般不会把进程干掉,我操作过很多次,只遇到过一次进程被gdb down的情况。
使用了glibc,可以尽快替换为jemolloc,https://dev.mysql.com/doc/refman ... qld_safe_malloc-lib

jemalloc下载地址https://pkgs.org/download/jemalloc
12下一页
李努力

4

主题

7

博客

190

贡献

中级会员

Rank: 3Rank: 3

积分
223

2022年度博学人物2022年度求知人物2022年度妙笔生花2022年度活跃用户助人为乐(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-21 21:22 , Processed in 0.029603 second(s), 22 queries , Redis On.
快速回复 返回顶部 返回列表