首页 » MySQL » 正文

MariaDB使用jemalloc或tcmalloc优化内存分配

  • 操作系统: CentOS 8
  • MariaDB: 10.3.x

安装jemalloc内存分配器

###jemalloc在EPEL源中
yum install epel-release -y
yum install jemalloc jemalloc-devel -y

###查看jemalloc库文件位置
[root@CentOS]# ldconfig -p|grep jemalloc
    libjemalloc.so.2 (libc6,x86-64) => /lib64/libjemalloc.so.2
    libjemalloc.so (libc6,x86-64) => /lib64/libjemalloc.so
###源码安装
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
ldconfig

systemd方式管理MariaDB

[root@CentOS]# ls -l /usr/lib/systemd/system/mariadb.service
-rw-r--r-- 1 root root 2545 7月  21 10:43 /usr/lib/systemd/system/mariadb.service

vim 打开/usr/lib/systemd/system/mariadb.service文件
在[Service]字段加入以下内容
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so"

############################################
[Service]
Type=notify
User=mysql
Group=mysql
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so"

systemctl daemon-reload
systemctl restart mariadb

[ -x /usr/bin/lsof ] || yum install lsof -y
lsof -n|grep mysqld|grep jemalloc

[root@CentOS]# lsof -n|grep mysqld|grep jemalloc
mysqld    44568                           mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44569 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44570 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44571 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44572 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44573 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44574 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44575 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44576 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
mysqld    44568 44577 mysqld              mysql  mem       REG              253,1   608096    1979390 /usr/lib64/libjemalloc.so.2
............................................................................

管理脚本方式管理

在管理脚本内加入如下内容
###根据实际情况修改
export LD_PRELOAD=/usr/lib64/libjemalloc.so

TCMALLOC内存分配器

TCMALLOC内存分配器是谷歌发布的,部分场景下比JEMALLOC性能稍好,差异不大,TCMALLOC需要手动安装
yum install gcc gcc-c++ make -y
###64位操作系统需要安装libunwind,libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能。
###其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。

###安装libunwind
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install

###安装gperftools,TCMALLOC包含在gperftools包中
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/locallib.conf
ldconfig
TCMALLOC的加载方式和JEMALLOC一样,都是修改启动管理脚本
如果是MariaDB 10.x以下的版本,可以在/etc/my.cnf中添加以下内容加载,重启后生效
[mysqld_safe]
malloc-lib = /usr/lib64/libjemalloc.so

本文共 1 个回复

  • garfine 2021/06/08 14:54

    太牛逼了,我找了一圈google,百度,各种关于mariadb启动不了jemalloc的,就在你这里解决了。 在[Service]字段加入以下内容 Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so" 不过我写的是 在[Service]字段加入以下内容 Environment="LD_PRELOAD=/usr/local/lib/libjemalloc.so.2" 反正解决了就是好。谢谢你~~ :roll:

发表评论