Mysql使用 jemalloc 内存分配器

发布时间 2023-09-26 10:59:27作者: 武平宁

/usr/lib64/libjemalloc.so

是一个动态链接库文件,它包含了 jemalloc 内存分配器的实现。jemalloc 是一个通用的内存分配器,旨在为多线程应用程序提供优秀的性能。它通常被用在需要高效内存管理的应用程序中,如数据库服务器、Web 服务器等。

安装库文件

这个库文件一般是通过系统的包管理器来安装的。在大多数 Linux 发行版中,你可以使用如下命令来安装 libjemalloc:

sudo yum install jemalloc   # CentOS/RHEL
sudo apt-get install libjemalloc-dev   # Ubuntu/Debian

Mysql 使用 jemalloc

对于 MySQL,若要使用 jemalloc 作为其内存分配器,你需要在编译时指定 --with-jemalloc 选项。例如:

./configure --with-jemalloc
make
sudo make install

如果你已经编译并安装了 MySQL,但希望启用 jemalloc,那么你需要重新编译 MySQL 并指定 --with-jemalloc 选项。

另外,请注意,不同的系统可能有不同的路径和命令,上述命令仅供参考。

Mariadb 默认的内存分配器 与 jemalloc 的比较

MariaDB默认使用的内存分配器是ptmalloc(Glibc),而 jemalloc是MariaDB、Redis、Tengine等推荐的内存分配器。

ptmalloc(Glibc)是GNU C库的默认内存分配器,具有稳定性和可靠性高的优点,同时也拥有很好的性能。另一方面,ptmalloc对于内存碎片的处理不够理想,可能会导致内存利用率降低。

jemalloc作为一款优秀的内存分配器,它的设计目标就是提供优秀的性能和扩展性,同时保证内存使用的公平性。相比ptmalloc,jemalloc的内存碎片更少,这可以提高内存的利用率。同时,jemalloc支持多线程,可以更好地利用多核CPU的性能。

使用jemalloc还是默认的ptmalloc,取决于具体的应用场景和需求。在需要处理大量并发小请求的场景下,jemalloc可以提高系统的响应速度和吞吐量。在需要处理大量内存分配和释放的场景下,jemalloc可以提供更好的性能和内存利用率。然而,对于稳定性要求非常高的系统,ptmalloc(Glibc)可能是一个更安全的选择。

使用 systemd 配置 jemaolloc

执行systemctl cat mariadb查看,如果存在:
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so"说明已经配置了。

如果没有,执行以下操作进行配置:

mkdir -p /etc/systemd/system/mariadb.service.d/                                                 
echo -e "[Service]\nEnvironment=\"LD_PRELOAD=/usr/lib64/libjemalloc.so\"" >/etc/systemd/system/mariadb.service.d/libs.conf              

重启服务:

systemctl daemon-reload                                                                                                                 
systemctl restart mariadb

连接mysql,查看是否配置成功:

show variables like '%mall%';

# | version_malloc_library | jemalloc 5.2.1-0-xx | 表示已启用jemalloc
# | version_malloc_library | system | 表示仍然使用系统默认的内存分配器