IE盒子

搜索
查看: 114|回复: 0

关于MySQL配置tcmalloc后在高并发下内存使用情况

[复制链接]

3

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-1-9 09:39:49 | 显示全部楼层 |阅读模式
1、概述
tcmalloc非常出名了,由google推出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定。现在可以将MySQL使用了tcmalloc来管理内存,应对高并发的场景。
但是两者结合后,它们的内存使用情况,我尝试用压测的方式记录内存使用情况,再与默认的glibc内存分配器做对比,看看其内存分配性能分配差异。
注意:由于是通过压测的方式得出结果,下面的测试结果,仅供参考;毕竟在实际场景中,需要长时间的运作,才能有效体现tcmalloc内存管理的性能。

2、准备
测试环境为2台虚拟主机VM,配置如下:



MySQL配置参数:
shell> vim /etc/my.cnf
# innodb缓冲池大小设置为内存的80%
innodb_buffer_pool_size = 6442450944
# 文件描述符
open_files_limit = 655350
innodb_open_files=655350
# 最大连接数
max_connections=10240修改系统文件描述符
shell> vim /etc/sysctl.conf
fs.file-max = 655350
# 激活
shell> sysctl -p
shell> ulimit -n 655350
shell> vim /etc/security/limits.conf
* - nofile 655350
root hard nofile 655350
root soft nofile 655350
3、安装tcmalloc
开始安装
选择其中一台VM安装tcmalloc
先安装相关运行库,因为是用c++写的,需要make,还有一个运行环境libunwind
shell> yum -y install gcc make gcc-c++ libunwind然后下载并安装google-perftools
#下载源码包
shell> wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz
shell> tar zxvf gperftools-2.10.tar.gz
#开始编译安装
shell> cd gperftools-2.10
shell> ./configure
shell> make && make install
#搜索找到安装好的相关C库文件
shell> find / -name libtcmalloc.so
/usr/local/lib/libtcmalloc.so
/opt/gperftools-2.5/.libs/libtcmalloc.so
#创建lib库软连接,这样就不需要用ldconfig了
shell> ln -sf /usr/local/lib/libtcmalloc.so /usr/lib/
shell> ln -sf /usr/local/lib/libtcmalloc.so /usr/lib64/
# 查看一下
shell> ll /usr/lib/libtcmalloc.so
配置MySQL使用
使用MySQL调用这个模块,本文采用加载的配置文件的方法。不过,都要重启MySQL程序才能生效。
没有任何应用服务加载的话,下面这条命令是没有返回的:
shell> lsof -n | grep tcmalloc然后,我们加到MySQL的配置文件my.cnf来使用
shell> vim /usr/lib/systemd/system/mysqld.service
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# 写入配置文件
shell> echo 'LD_PRELOAD=/usr/local/lib/libtcmalloc.so' > /etc/sysconfig/mysql
# 重启
shell> systemctl daemon-reload
shell> systemctl restart mysqld
# 注意: 如果是正常安装并加载libtcmalloc.so的话,是不会报错的,重启将直接生效。
shell> lsof -n | grep tcmalloc
mysqld 31423            mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31424      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31437      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31438      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31439      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31440      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31441      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31442      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31443      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
mysqld 31423 31444      mysql  mem       REG              253,1    2632824    4734064 /usr/local/lib/libtcmalloc.so.4.5.10
开始压测
压测工具采用MySQL官方提供的mysqlslap工具命令,至于具体用法,可以从官网查阅;以下是简单说明:
shell> mysqlslap -h127.0.0.1 -uroot -p --concurrency=<并发量> --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=<总的测试查询次数>
说明:测试100个并发线程,测试次数1次,自动生成SQL测试脚本,读、写、更新混合测试,自增长字段,测试引擎为innodb,共运行1000次查询
shell> mysqlslap -h127.0.0.1 -uroot -p --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=1000我们围绕并发量与查询次数两个维度,分别用tmalloc与glibc来压测,看看内存的使用情况。
并发量:100





并发量1000





并发量10000





总结
1、从并发量100,1000两个指标来看,tmalloc占用的内存较少,减少内存碎片化会较为明显。
2、但是在并发量10000的指标来看, 两者的差异就不大了,反而在查询1万次,glibc占用内存更少(当时测试都觉得诧异,单独压测3次的)。
3、在并发量10000,并且查询1百万次情况下,tmalloc多次压测都是OOM的,反而glibc会相对稳定,压测时长平均在10分钟左右。
4、单纯从以上数据观察, 建议使用tmalloc前,根据现有的配置,做多次测试,找出最佳的并发量平衡点,可以发挥稳定的性能。
以上就是今天的内容,希望读者朋友看完这篇文章后有所启发。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表