jemalloc优化MySQL、Nginx内存管理

Linux313阅读模式

上一篇文章《TCMalloc优化MySQL、Nginx、Redis内存管理》,下面来看下jemalloc

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都不相伯仲,皆为内存管理器领域最高水平。如下图:

jemalloc优化MySQL、Nginx内存管理
 图片来源: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.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

或者直接加载,修改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
Mon Sep  2 10:32:04 CST 2013

 
  • 本文由 yeho 发表于 2013-09-02
  • 转载请务必保留本文链接:https://linuxeye.com/356.html
Linux

Nginx反向代理永久性缓存

Nginx缓存简介 Nginx缓存方式有两种: 永久性的缓存:这种缓存若不手动删除,该缓存文件会一直生效,因此,永久缓存只是用于缓存网站中几乎不会更改的内容; 临时缓存:这种缓存是根据请求连接进行哈希...
Linux

Nginx Lua Redis防止CC攻击

Nginx Lua Redis防止CC攻击实现原理:同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds...
Linux

Keepalived+Nginx架构整理版

Keepalived介绍 keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如...
Nginx中文域名配置 Linux

Nginx中文域名配置

Nginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转。 why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中...
    • 采觅随记
      采觅随记

      我就想弱弱的问一下,大哥您用的是jemalloc还是TCMalloc?我用oneinstack安装环境的时候没有启用内存管理,版本分别是Nginx 1.10.1,MySQL 5.6.32,能按照此文方法进行内存管理软件吗?
      另外,MySQL5.6版本昨天升级到5.6.33了,我看您关于页面也上也修改了,但是我升级的时候提示“MySQL version does not exist!” :!: 什么鬼?!

        • 采觅随记
          采觅随记

          @ 采觅随记 啊,话说我昨天大前天折腾 Nginx fastcgi_cach的时候已经在文章看到你的模块配置上有–with-ld-opt=-ljemalloc …..

          • yeho
            yeho

            @ 采觅随记 我一般用jemalloc,国内镜像源可能没有同步,今天应该可以了

        匿名

        发表评论

        匿名网友
        确定

        取消

        拖动滑块以完成验证