jemalloc 内存分配管理

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

今天在安装mariaDB的时候发现编译一直提示一个错误/usr/bin/ld: cannot find -ljemalloc_pic

后来发现是因为没有用这个jemalloc 可能是mariaDB数据库默认就使用这种方式管理多线程内存分配

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

wKioL1Sp-U6gtsSMAAEliq1Q6bc263.jpg

最 左边的就是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效率更高

二、使用

安装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


三、验证是否生效

lsof -n | grep jemalloc


本文转自 aklaus 51CTO博客,原文链接:http://blog.51cto.com/aklaus/1599202


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 程序员 C语言
内存管理——内存分配函数
内存管理——内存分配函数
19 0
|
9月前
|
Web App开发 Go C语言
ptmalloc、tcmalloc与jemalloc对比分析(二)
ptmalloc、tcmalloc与jemalloc对比分析(二)
163 0
|
3月前
|
存储 编译器 C语言
C/C++内存管理--2
C/C++内存管理--2
|
3月前
|
存储 C语言 C++
C/C++内存管理--1
C/C++内存管理--1
|
8月前
|
Arthas 监控 Java
实战总结|记一次glibc导致的堆外内存泄露
本文记录一次glibc导致的堆外内存泄露的排查过程。
1189 2
|
9月前
|
Web App开发 存储 缓存
ptmalloc、tcmalloc与jemalloc对比分析(三)
ptmalloc、tcmalloc与jemalloc对比分析(三)
700 0
|
9月前
|
存储 缓存 算法
ptmalloc、tcmalloc与jemalloc对比分析(一)
ptmalloc、tcmalloc与jemalloc对比分析
260 0
|
10月前
|
存储 安全 程序员
内存分配理解
内存分配理解
116 0
|
缓存 Linux
【Linux】之【内存】相关的命令&&解析以及内存相关的问题[free、meminfo、内存泄漏、内存溢出、Overcommit]
free命令的功能是显示系统内存使用量情况,包含物理和交换内存的总量、使用量和空闲量情况。
165 0
|
NoSQL Linux Redis
关于redis源码的内存分配,jemalloc,tcmalloc,libc
关于redis源码的内存分配,jemalloc,tcmalloc,libc
723 0