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

Redis 2.4版本之后,默认使用Jemalloc来做内存管理;Tengine也整合JemallocJemalloc从各方评测的结果可见与google tcmalloc都不相伯仲,皆为内存管理器领域最高水平。如下图:

56.jpg

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

LNMP一键安装包里面已经集成了Jemalloc,在首次安装LNMP的时候就会提示是否安装和使用内存优化管理程序的。

Jemalloc.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.4
./upgrade.sh nginx

最后验证Jemalloc是否已经生效并工作

用如下命令查看:

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
最后修改:2017 年 06 月 28 日
如果觉得我的文章对你有用,请随意赞赏