MySQL使用jemalloc作为内存分配器

一、背景

数据库服务器内存告警,服务器的内存是512G,数据库innodb_buffer_pool_size分配了384G内存,随着时间推移,内存占用慢慢趋近于384G,而后开始使用服务器的交换空间(虚拟内存),跟服务器运维工程师沟通得知,这个虚拟内存实际是使用的磁盘空间,这样可能会影响到数据库服务的读写,所以开始研究分析,要如何解决。

二、方案选型

根据查阅相关资料,了解到MySQL默认是使用glibc作为内存分配器的,而市面上也有其他独立的内存分配器,如jemalloc、tcmalloc等。

jemalloc和tcmalloc的对比请参考:

内存分配器对比:jemalloc vs tcmalloc 的性能测试与选型_tcmalloc jemalloc对比-CSDN博客

三、jemalloc安装

1、下载地址:

Releases · jemalloc/jemalloc

2、解压安装包:

tar -jxvf jemalloc-5.3.0.tar.bz2

注:解压报错,执行:sudo yum -y install bzip2

3、编译安装:

复制代码
./autogen.sh

make -j8

sudo make install

ldconfig

4、修改配置:

找到mysql安装路径,在bin目录下有一个mysqld_safe的文件,打开文件在顶部加上:

export LD_PRELOAD=/usr/local/lib/libjemalloc.so.2

复制代码
# MySQL 安装根目录
basedir=/tools/mysql/mysql8

# 编辑mysqld_safe文件
vi /tools/mysql/mysql8/bin/mysqld_safe

# 加入以下内容
export LD_PRELOAD=/usr/local/lib/libjemalloc.so.2

# /usr/local/lib/libjemalloc.so.2 是jemalloc的默认路径

5、重启MySQL

sudo service mysql restart

四、验证

命令:

sudo lsof -p `pidof mysqld` | grep -i jemalloc

结果:

如果有指向jemalloc默认路径的记录,则说明mysql有成功使用jemalloc作为内存分配器,如果没有记录,则需要排查。

相关推荐
实泽有之,无泽虚之5 分钟前
SQL Server数据库备份与还原详解
数据库·sqlserver
DevOpenClub11 分钟前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
Java后端的Ai之路15 分钟前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python
AllData公司负责人20 分钟前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
bksczm21 分钟前
C++Redis开发(Ubuntu 22.04)
数据库·redis·缓存
zhangjw3435 分钟前
1-6 PostgreSQL 特色类型实战:数组、JSON & JSONB、枚举、范围类型
数据库·postgresql
杨云龙UP38 分钟前
Oracle 同义词(SYNONYM)详解及 Toad for Oracle SQL 智能补全配置实战
运维·数据库·sql·oracle·同义词·toad·toad for oracle
余槐i1 小时前
Spring Boot 3.2 偶发500无日志:线程池复用导致请求上下文丢失
spring boot·redis·后端·mysql·性能优化
倔强的石头_1 小时前
MongoDB迁移的新选项:在金仓KES上,用SQL管理文档数据
数据库
loulanyue_1 小时前
AI Agent记忆从不是向量库:Oracle拆解读写分离与记忆晋升门,终结无脑存聊天的伪智能——读Wojtek Pluta演讲
数据库·人工智能·oracle