安装Jemalloc优化MySQL、Nginx内存管理(Lnmp环境)

由于FaceBook而火起来的Jemalloc广为人之,但殊不知,它在malloc界里面很早就出名了。Jemalloc的创始人 Jason Evans 也是在FreeBSD很有名的开发人员。此人就在2006年为提高低性能的malloc而写的Jemalloc。Jemalloc是从2007年开始以FreeBSD标准引进来的。软件技术革新很多是FreeBSD发起的。在FreeBSD应用广泛的技术会慢慢导入到linux。

Redis 2.4版本之后,默认使用Jemalloc来做内存管理;Tengine也整合Jemalloc。Jemalloc从各方评测的结果可见与google tcmalloc都不相伯仲,皆为内存管理器领域最高水平。如下图:
安装Jemalloc优化MySQL、Nginx内存管理(Lnmp环境).jpg

最左边的就是glibc的malloc,最右边的就是Jemalloc。从图表上可以看出,Jemalloc的性能有glibc的两倍以上。非常压倒性的性能差异。因此,使用了Jemalloc的应用程序自然会快很多。Jemalloc旁边的就是tcmalloc。Tcmalloc的性能与其相差甚微,低Jemalloc 2.1.0慢4.5%。图上和tcmalloc的1.4版本,而现在已经到2.1版本,因此实际上这两者应该是不相仲伯的。Jemalloc的创始人 jason evans 也意识到这一点,说在cpu core 8以上的计算机上Jemalloc效率更高。

LNMP一键安装包里面已经集成了Jemalloc,在首次安装LNMP的时候就会提示是否安装和使用内存优化管理程序的。
安装Jemalloc优化MySQL、Nginx内存管理(Lnmp环境).png

如果安装LNMP时没有安装Jemalloc的话,可以使用LNMP的扩展安装脚本来安装,如下:

./addons.sh jemalloc

Redis默认就是使用Jemalloc的

如果安装Redis的时候,LNMP环境没有集成Jemalloc的话,可以在安装完Jemalloc后重新安装、编译一下Redis即可自动重新编译加入Jemalloc的支持了,如下命令:

./addons.sh redis

使用Jemalloc优化MySQL

通过命令行修改mysqld_safe来让当前的MySQL来支持Jemalloc,如下命令:

sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/local/mysql/bin/mysqld_safe
service mysqld restart

使用Jemalloc优化Nginx

LNMP下安装Jemalloc后,只需要重新编译一下Nginx即可,命令如下:

cd lnmp1.6
./upgrade.sh nginx

验证是否生效并工作

用如下命令查看(需装请losf,yum install losf -y 即可):

lsof -n | grep jemalloc

程序运行示例图

(类似即表明Jemalloc已经生效了):

nginx      5398          root  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
nginx      5401       newblog  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199         mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6200   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6245   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6254   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6584   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6762   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6773   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
mysqld     6199  6774   mysql  mem  REG 8,1   2796824     152140 /usr/local/lib/libjemalloc.so.2
版权声明
本站所发布的一切源码、模板、应用、文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如有侵权请邮件与我们联系处理。本站内容适用于DMCA政策。
Last modification:August 25th, 2019 at 04:45 pm

Leave a Comment