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作为内存分配器,如果没有记录,则需要排查。

相关推荐
while(1){yan}8 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
盛世宏博北京9 小时前
高效环境管控:楼宇机房以太网温湿度精准监测系统方案
开发语言·数据库·php·以太网温湿度变送器
运维行者_9 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
gfdhy9 小时前
【C++实战】多态版商品库存管理系统:从设计到实现,吃透面向对象核心
开发语言·数据库·c++·microsoft·毕业设计·毕设
Elastic 中国社区官方博客9 小时前
Elasticsearch:上下文工程 vs. 提示词工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小唐同学爱学习9 小时前
如何解决海量数据存储
java·数据库·spring boot·mysql
wWYy.10 小时前
详解redis(15):缓存雪崩
数据库·redis·缓存
zzcufo10 小时前
多邻国第五阶段第13部分
java·开发语言·数据库
这周也會开心10 小时前
Redis相关知识点
数据库·redis·缓存
小白爱运维10 小时前
MySQL升级8.0.44后登录报错-系统表不支持'MyISAM'存储引擎
数据库·mysql