MySQL 8.0 启用 Jemalloc
随便一搜你大概会找到这样的建议:
#修改my.cnf文件 [mysqld_safe]配置区间,加上Jemalloc选项
[mysqld_safe]
malloc-lib = /usr/lib64/libjemalloc.so
但这是给 MySQL 5.6 用的,从 MySQL 5.7 版本开始,已经默认不使用 mysqld_safe 来启动了。
所以这是行不通的。
虽然说是 Jemalloc,但 TCmalloc 等也是同理。
安装 Jemalloc
A. 手动安装
到 https://github.com/jemalloc/jemalloc/releases 下载并编译安装
B.使用包管理器
RHEL 系列可以在 EPEL 源中找到。
手动启动 MySQL
厄,你不应该手动启动 mysql,但你一定要的话
LD_PRELOAD=/usr/lib64/libjemalloc.so.2 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user mysql
将 LD_PRELOAD=
指向你的 Jemalloc 实际路径。
如 jemalloc 5.1.2 应该是 /usr/lib64/libjemalloc.so.2
。
或者 cat /usr/bin/jemalloc.sh
,LD_PRELOAD=${libdir}/libjemalloc.so.2
这一行会告诉你实际路径。
使用 Systemd 启动 MySQL
在你的 mysql.serive
(/usr/lib/systemd/system/EnvironmentFile=-/etc/sysconfig/mysql
例如:
[Service]
User=mysql
Group=mysql
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
- Systemd 中的
=-
表示:可选前缀“-”,表示如果文件不存在,则不会读取它,并且不会记录错误或警告消息。
然后新建 /etc/sysconfig/mysql
文件,在其中写写入:
LD_PRELOAD=/usr/lib64/libjemalloc.so.2
将 LD_PRELOAD=
指向你的 Jemalloc 实际路径。
如 jemalloc 5.1.2 应该是 /usr/lib64/libjemalloc.so.2
。
或者 cat /usr/bin/jemalloc.sh
,LD_PRELOAD=${libdir}/libjemalloc.so.2
这一行会告诉你实际路径。
检查 MySQL 是否正在使用 Jemalloc
执行 lsof -Pn -p $(pidof mysqld) | grep jemalloc
,有指向 /usr/local/lib/libjemalloc.so.2
则为成功。
No Comments