Debian 12下为MySQL 5.7安装jemalloc优化内存的方法

栏目:Linux, 服务器 作者:小天 点击: 651 次

发现使用MySQL 5.X时,即使空闲也不会释放内存,只要将在my.cnf中设置了使用最大的内存值后,MySQL运行一段时间后就会无限接近最大值,而且会一直保持,即使空闲也不会自动释放,通过阅读博文https://www.cnblogs.com/coygfly/p/17513152.html后发现博主总结了以下方法。

总结一下MySQL内存使用率高且不释放的应对方法:

1. 扩内存,有钱任性(即使扩展,如果设置MySQL的最大使用内存值过大,运行时间长了,所占的内存仍然会无限接近最大值,而且会一直保持);

2. 在重启数据库释放内存(影响网站访问);

3. 在线修改减小innodb_buffer_pool_size参数(牺牲一定innodb性能,无法更有效地利用硬件资源);

4. 排查消耗内存的慢SQL,及时优化(经常排查,需手动释放,费时费力);

5. 检查相关buffer的session参数是否设置合理,比如read_rnd_buffer_size是否设置过大;

6. 使用gdb回收内存碎片:gdb --batch --pid ‘pidof mysqld’ --ex 'call malloc_trim(0)' (不是好方法,生产环境谨慎操作);

7. 对MySQL进程配置jemalloc内存管理模块(本文优选方法);

8. 配置读写分离,将读操作应用到从库,减少对主库的影响;
问题又来了,只安装了不优化设置也是不起作用的,后来结合参考博文:https://www.cnblogs.com/Lifehacker/p/jemalloc_settings.html 的方法,问题得到解决。

本文以Debian服务器为例:
1. 确认你的系统是否安装了jemalloc模块:

如果没有,那么可能你的系统并未安装,又或者未设置jemallocr所在目录的环境变量,例如你可以使用以下命令来搜索jemalloc模块文件和命令所在的位置:

2. 查看对应的版本:

3. 如果版本太低,又或者未安装,请使用以下方命令进行安装或升级:

4. 再次执行第1步命令验证安装了jemalloc模块:

如果出现以下信息,表示已经安装成功:

libjemalloc.so.2 (libc6,x86-64) => /usr/local/lib/libjemalloc.so.2
libjemalloc.so (libc6,x86-64) => /usr/local/lib/libjemalloc.so

5. 通过以下命令查找到mysqld_safe文件的所在位置:

例如我服务器的mysqld_safe所在位置是/usr/bin/mysqld_safe

6. 编辑mysqld_safe文件:

在文件配置的最前面添加以下内容:

# memory allocation
export LD_PRELOAD=/usr/local/lib/libjemalloc.so.2
export MALLOC_CONF="background_thread:true,dirty_decay_ms:10000,muzzy_decay_ms:10000"

参数说明:
background_thread:true
说明:启用后台线程后,jemalloc 会在后台异步回收空闲的内存,而不是在应用程序线程中进行。这可以减少内存分配和释放对应用程序性能的影响。
dirty_decay_ms:10000 (单位为毫秒)
说明:控制 "dirty" 页面(分配过但未使用的内存页)被回收的速度。

详细说明

  • 值表示页面变为 "dirty" 状态的时间(以毫秒为单位)。
  • 一个较小的值意味着更快地回收dirty页面,可以降低内存使用,但可能会增加 CPU 开销。
  • 一个较大的值意味着较慢的回收,可能会减少 CPU 开销,但会增加内存使用。

muzzy_decay_ms:10000 (单位为毫秒)

说明:控制 "muzzy" 页面(未使用且已重置的内存页)被回收的速度。

详细说明

  • 值表示页面变为 "muzzy" 状态的时间(以毫秒为单位)。
  • 一个较小的值意味着更快地回收muzzy页面,可以降低内存使用,但可能会增加 CPU 开销。
  • 一个较大的值意味着较慢的回收,可能会减少 CPU 开销,但会增加内存使用。

7.  执行重启mysql

8. 执行以下命令验证mysql进程是否使用了jemalloc模块:

如果出现以下内容,表示mysql正在使用jemalloc查块了。

mysqld 1556578 mysql mem REG 254,1 5592736 163304 /usr/local/lib/libjemalloc.so.2

官方文档:
https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md
https://jemalloc.net/jemalloc.3.html#opt.dirty_decay_ms
https://jemalloc.net/jemalloc.3.html#opt.muzzy_decay_ms



声明: 本文由( 小天 )原创编译,转载请保留链接: Debian 12下为MySQL 5.7安装jemalloc优化内存的方法

------====== 本站公告 ======------
欢迎使用趣域网域名百科,我们将长期提供域名使用相关知识和投资域名的方法和技巧;并提供主机、服务器的解决问题和网站运营方法。