jemalloc在linux上从安装到使用

jemalloc在linux上从安装到使用

上次在引导大家安装redis时提到可能会报错:
jemlloc库缺失

发现了redis有用到jemalloc。

首先,jemalloc是干什么的?
我们看看作者自己的介绍:

jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support

意思是说jemalloc干了malloc干的活,而且干得好一些,主要体现在避免内存碎片与并发扩展上。

首先,什么是内存碎片?

假设系统只有一片64字节的内存,分配给4个单元,每个16个字节:
这里写图片描述
将这4个单元分配释放再重新分配4个12字节的内存片:
这里写图片描述
我们发现多了4*4不连续的内存片,下次我们就不能分配12或者16字节的内存了。
另外,glibc分配内存一般向4或者8取整,比如我们向申请13字节的内存,实际上得到的内存片会是16字节,多出来的3个字节我们不知道,也就无法使用了。

内存碎片很可怕吗?
短时间内不明显,对于线上的服务器比如nginx,运行时间可能经年,每天几亿的请求量,如果每天产生100片 ,一年下来也是3万多片 ,相当恐怖!

jemalloc可以有效的解决这个问题!
jemalloc的性能图(上篇已经展示过):
这里写图片描述

既然jemalloc这么牛逼,我们就来安装吧!

先github上下载:
https://github.com/jemalloc/jemalloc/releases

下载包地址:
jemalloc-4.2.1

下载到linux目录下解压:

tar -xjvf jemalloc-4.2.1.tar.bz2
生成的文件列表如下:
这里写图片描述

在此目录下预编译

./configure –prefix=/usr/local/jemalloc

完成后再编译:

make -j8 && make install

我们到生成目录去看看:

这里写图片描述

生成的头文件在include里,库在lib里。

至此,安装算是完成了。

下面看看如何使用:
在编译链接时直接指向jemalloc即可:

gcc -g -c -o 1.o 1.c
gcc -g -o 1.out 1.o -L/usr/local/jemalloc/lib -ljemalloc

运行程序时可能会报找不到库:
这里写图片描述

只要将jemalloc的库被系统找到即可:

echo /usr/local/jemalloc/lib >> /etc/ld.so.conf
ldconfig

再次运行即可


  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值