Jemalloc优化MySQL和Nginx

作者:mrr 时间:2024-01-14 19:50:48 

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

最左边的就是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
查找文件 /usr/local/mysql/bin/mysqld_safe
在#executing mysqld_safe 下面加上
LD_PRELOAD=/usr/local/lib/libjemalloc.so

重新启动MYSQL
使用下面代码自动修改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

编译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

标签:jemalloc,nginx,mysql,优化
0
投稿

猜你喜欢

  • Mysql排序和分页(order by&limit)及存在的坑

    2024-01-20 04:55:28
  • python 输出所有大小写字母的方法

    2021-01-05 01:02:57
  • Django实现将views.py中的数据传递到前端html页面,并展示

    2022-04-04 10:44:56
  • mysql数据库是做什么

    2024-01-16 04:18:16
  • 这些CSS Selector,你都熟悉吗?

    2008-12-21 16:30:00
  • MySQL最基本的命令使用汇总

    2024-01-28 06:18:30
  • pytorch中图像的数据格式实例

    2021-02-16 06:22:19
  • js跳转页面方法实现汇总

    2024-04-27 15:19:23
  • 浅析DW4中的站点管理

    2007-02-03 11:40:00
  • OpenCV半小时掌握基本操作之对象测量

    2023-06-08 12:09:18
  • vue登录页面回车执行事件@keyup.enter.native问题

    2023-07-02 17:01:42
  • asp如何让服务器延时执行更改后的数据?

    2010-05-13 16:35:00
  • PHP实现将MySQL重复ID二维数组重组为三维数组的方法

    2023-11-18 03:28:57
  • FCKEDITOR 的高级功能和常见问题的解决方法

    2023-12-16 16:07:13
  • 使用正则表达式找出不包含特定字符串的条目

    2010-03-02 22:06:00
  • Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取

    2022-07-09 19:47:48
  • Python绘制数据图表的超详细教程

    2021-03-05 01:54:36
  • python 读取文本文件的行数据,文件.splitlines()的方法

    2021-07-18 16:58:05
  • JavaScript基本数据类型及值类型和引用类型

    2024-05-10 13:59:39
  • python中的正则表达式,贪婪匹配与非贪婪匹配方式

    2023-04-04 18:37:36
  • asp之家 网络编程 m.aspxhome.com