jemalloc优化MySQL、Nginx内存管理

 Linux  jemalloc  MySQL  Nginx  内存管理   2017-04-20 12:48 

本文转载于:https://blog.linuxeye.cn/356.html


jemalloc源于Jason Evans 2006年在BSDcan conference发表的论文:《A Scalable Concurrent malloc Implementation for FreeBSD》。jason认为phkmalloc(FreeBSD’s previous malloc implementation by Kamp (1998))没有考虑多处理器的情况,因此在多线程并发下性能低下(事实如此),而jemalloc适合多线程下内存分配管理。从2007年开始以FreeBSD标准引进来。软件技术革新很多是FreeBSD发起,在FreeBSD应用广泛的技术会慢慢导入到Linux中。

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


 图片来源:

facebook

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

MySQL性能测试--jemalloc内存管理:http://www.linuxeye.com/Linux/1914.htmljemalloc作为可选项已经添加到《lnmp最新源码一键安装包

安装jemalloc

cd lnmp/src
wget http://www.canonware.com/download/jemalloc/jemalloc-3.4.0.tar.bz2
tar xjf jemalloc-3.4.0.tar.bz2
cd jemalloc-3.4.0
./configure
make && make install
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig

使用jemalloc优化MySQLMySQL/MaridDB 5.5编译方法,cmake预编译时加上下面参数

-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF

或者直接加载,修改mysqld_safe

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

cd lnmp/src/nginx-1.4.2
make clean
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module --with-http_ssl_module --with-http_flv_module \
--with-http_gzip_static_module --with-ld-opt="-ljemalloc"
make && make install

验证jemalloc优化Nginx是否生效,如下

lsof -n | grep jemalloc


PS: 个人验证效果如下:

mysqld    11089             mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11091       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11092       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11093       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11094       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11095       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11096       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11097       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11098       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11099       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11100       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11104       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11105       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11106       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11107       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11110       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11198       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
mysqld    11089 11250       mysql  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
nginx     28051              root  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
nginx     28317               www  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1
nginx     28318               www  mem       REG              202,1    1715616     395656 /usr/local/lib/libjemalloc.so.1


点赞 打赏
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

交流分享

QQ扫一扫或点击二维码加入,群号577543189
微信扫一扫,手滑关注它
微信扫一扫,进入小程序

推荐文章

标签云集

友情链接  交换友链

推广位