当前位置: 首页 > news >正文

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

再次运行即可

 

相关文章:

  • Android随记
  • java.lang.NoSuchMethodError: javax.ws.rs.core.HttpHeaders.getHeaderString(Ljava/lang/String;)Ljava/l
  • activeMQ使用总结 (spring 配置)
  • 并发 并行 同步 异步 多线程的区别
  • web服务器内置对象,或者说是ServletAPI的实例
  • 2016年NK冬季训练赛 民间题解
  • Tips
  • ratina 视网膜屏幕解决方案大全
  • rtmp拉流测试工具
  • cmd中java -jar *.jar 提示Unable to access jarfile *.jar或Windows不能用鼠标双击运行jar文件怎么办解决方案...
  • gulp同步执行任务
  • HBase内置过滤器的一些总结
  • 【VBA编程】09.使用Excle集合对象
  • 树莓派上Java程序作为linux服务并开机自动启动
  • tracert与pathping
  • 30天自制操作系统-2
  • canvas 五子棋游戏
  • CAP 一致性协议及应用解析
  • Golang-长连接-状态推送
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • linux学习笔记
  • Redis在Web项目中的应用与实践
  • 百度小程序遇到的问题
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 力扣(LeetCode)21
  • 力扣(LeetCode)56
  • 小试R空间处理新库sf
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (LeetCode 49)Anagrams
  • (简单) HDU 2612 Find a way,BFS。
  • (六)Hibernate的二级缓存
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)3D模板阴影原理
  • ./configure,make,make install的作用(转)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET BackgroundWorker
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 获取url的方法
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET上SQLite的连接
  • ;号自动换行
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Validated和@Valid校验参数区别
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [ACTF2020 新生赛]Include
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [C#] 我的log4net使用手册