这篇文章主要介绍了Jemalloc优化MysqL和Nginx的相关资料,需要的朋友可以参考下
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都不相伯仲,皆为内存管理器领域最高水平。如下图:
最左边的就是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.html
jemalloc作为可选项已经添加到《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优化MysqL
方法一:
MysqL/MaridDB 5.5编译方法,cmake预编译时加上下面参数
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
方法二:
查找文件 /usr/local/MysqL/bin/MysqLd_safe
LD_PRELOAD=/usr/local/lib/libjemalloc.so
重新启动MysqL
sed -i 's@executing MysqLd_safe@executing MysqLd_safenexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/local/MysqL/bin/MysqLd_safe service MysqLd restart
使用jemalloc优化Nginx
--with-ld-opt="-ljemalloc"
具体实现:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。