jemalloc在linux上从安装到使用

上次在引导大家安装Redis时提到可能会报错: 

发现了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

再次运行即可

jemalloc在linux上从安装到使用的更多相关文章

  1. 在Linux上rpm安装运行Redis 3.0.4

    http://www.rpmfind.net搜索redis,找到redis3.0.4的rpm源选做 wget ftp://fr2.rpmfind.net/linux/remi/enterprise/6 ...

  2. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  3. GIT在Linux上的安装和使用简介

    GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端软件支持 ...

  4. 分布式缓存技术redis学习(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  5. 在Linux上怎么安装和配置Apache Samza

    samza是一个分布式的流式数据处理框架(streaming processing),它是基于Kafka消息队列来实现类实时的流式数据处理的.(准确的说,samza是通过模块化的形式来使用kafka的 ...

  6. ODI11G 在Linux上的安装配置

    ODI11G 在Linux上的安装配置 OS环境:Red hat Linux x86_64 一.JDK安装 1. 去oracle官网上下载 http://www.oracle.com/technetw ...

  7. 【JAVAWEB学习笔记】27_Redis:在Linux上的安装、Jedis和常用命令

    一.Redis简介 1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据     库是基于特殊的结构,并将数据存储到内存的数据库.从性 ...

  8. 【数据库】Mean web开发 04-MongoDB在Linux上的安装及遇到的问题

    简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...

  9. linux上redis安装配置及其防漏洞配置及其攻击方法

    Linux上redis安装: 需先在服务器上安装yum(虚拟机可使用挂载的方式安装) 安装配置所需要的环境运行指令:  yum -y install gcc 进入解压文件执行make 指令进行编译 执 ...

随机推荐

  1. Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能对比

    Linux内核suspend状态 Linux内核支持多种类型的睡眠状态,通过设置不同的模块进入低功耗模式来达到省电功能.目前存在四种模式:suspend to idle.power-on standb ...

  2. Jquery揭秘系列:实现$.fn.extend 和$.extend函数

    前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数. 其他的不多说,直接切入主题吧! 先来看看这两个函数的区别: $.fn.extend是为查询的 ...

  3. 俄罗斯方块C#版

    using System; using System.Windows.Forms; using System.Drawing; using System.Media; class me : Form ...

  4. IOS实现自动循环滚动广告--ScrollView的优化和封装

    一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...

  5. AngularJS模型

    1. AngularJS模型主要就是使用的AngularJS的ng-model指令. ng-model指令可以将输入域的值与 AngularJS 创建的变量绑定. <!DOCTYPE html& ...

  6. Java学习笔记(一)

    纯属个人学习笔记,有什么不足之处大家留言,谢谢 Java程序打包与JAR运行方法 在Eclipse的"包资源管理器"视图中找到要打包成JAR文件的项目.在项目名称上单击鼠标右键,在 ...

  7. sql server 多列转多行实现方法

    select * from b_workOrder select * from( SELECT work_order_id,work_level, roles,code FROM (SELECT wo ...

  8. JS操作Unicode编码的emoji表情显示在页面

    前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...

  9. window frida安装

    当需要安装第三方python包时,可能会用到easy_install命令.easy_install是由PEAK(Python Enterprise Application Kit)开发的setupto ...

  10. 自定义webkit浏览器滚动条样式

    ::-webkit-scrollbar { width: 5px; height: 5px; } ::-webkit-scrollbar-track { background-color: trans ...