mysql内存泄露_MySQL关于内存泄漏与内存分配最佳实践

本文介绍了在遇到MySQL内存泄漏问题时,如何通过引入tcmalloc和调整systemd文件来解决,并分享了配置MySQL内存使用的最佳实践,强调避免让MySQL使用swap以保持最佳性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL关于内存泄漏

现象&猜测原因最近发现新上的项目数据库服务器一直报可用内存不足,OS版本:Centos Linux release 7.6.1810,内核版本:3.10.0-957.el7.x86_64,MySQL版本:5.7.28&5.7.29。排查一圈应该是内存泄漏了。

加上前几日爱可生开源社区的关于内存泄漏的文章,和叶老板的支持,怀疑2个方面:1.P_S;2.table_open_cache

和table_definition_cache

设置的太小。

解决方案看了BUG库,大部分人都是采用tcmalloc或者jemalloc来解决这个问题,结合现在的systemd,总结解决方法如下yum -y install gcc make gcc-c++

## 1.下载&编译tcmalloc

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.7.90/gperftools-2.7.90.tar.gz

tar xvf gperftools-2.7.90.tar.gz

cd gperftools-2.7.90/

./configure

make

makeinstall

find ! -path "/proc/*" -name libtcmalloc.so

/usr/local/lib/libtcmalloc.so

## 2.修改systemd文件

vim etc/systemd/system/mysqld_3306.service

EnvironmentFile=-/etc/sysconfig/mysql

## 3.编译好的libtcmalloc.so路径写入/etc/sysconfig/mysql

echo 'LD_PRELOAD=/usr/local/lib/libtcmalloc.so' > etc/sysconfig/mysql

## 4.重新reload systemd,重启MySQL

systemctl daemon-reload

systemctl restart mysqld_3306.service

## 5.验证生效

[root@xxx service]# lsof -n | grep tcmalloc

mysqld 106311 mysql mem REG 253,0 2582792 632947 usr/local/lib/libtcmalloc.so.4.5.4

mysqld 106311 106312 mysql mem REG 253,0 2582792 632947 usr/local/lib/libtcmalloc.so.4.5.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值