上一篇文章《TCMalloc优化MySQL、Nginx、Redis内存管理》,下面来看下jemalloc 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中。 mysql
Redis 2.4版本以后,默认使用jemalloc来作内存管理;tengine也整合jemalloc。jemalloc从各方评测的结果可见与google tcmalloc都不相伯仲,皆为内存管理器领域最高水平。以下图: linux
最左边的就是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效率更高。 nginx
MySQL性能测试–jemalloc内存管理:http://www.linuxeye.com/Linux/1914.html
jemalloc做为可选项已经添加到《lnmp最新源码一键安装包》 sql
安装jemalloc shell
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
或者直接加载,修改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个人博客发布地址: http://blog.linuxeye.com/356.html