jemalloc在linux上从安装到使用
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上从安装到使用的更多相关文章
- 在Linux上rpm安装运行Redis 3.0.4
http://www.rpmfind.net搜索redis,找到redis3.0.4的rpm源选做 wget ftp://fr2.rpmfind.net/linux/remi/enterprise/6 ...
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- GIT在Linux上的安装和使用简介
GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端软件支持 ...
- 分布式缓存技术redis学习(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- 在Linux上怎么安装和配置Apache Samza
samza是一个分布式的流式数据处理框架(streaming processing),它是基于Kafka消息队列来实现类实时的流式数据处理的.(准确的说,samza是通过模块化的形式来使用kafka的 ...
- ODI11G 在Linux上的安装配置
ODI11G 在Linux上的安装配置 OS环境:Red hat Linux x86_64 一.JDK安装 1. 去oracle官网上下载 http://www.oracle.com/technetw ...
- 【JAVAWEB学习笔记】27_Redis:在Linux上的安装、Jedis和常用命令
一.Redis简介 1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库.从性 ...
- 【数据库】Mean web开发 04-MongoDB在Linux上的安装及遇到的问题
简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- linux上redis安装配置及其防漏洞配置及其攻击方法
Linux上redis安装: 需先在服务器上安装yum(虚拟机可使用挂载的方式安装) 安装配置所需要的环境运行指令: yum -y install gcc 进入解压文件执行make 指令进行编译 执 ...
随机推荐
- SQLite剖析之存储模型
前言 SQLite作为嵌入式数据库,通常针对的应用的数据量相对于DBMS的数据量小.所以它的存储模型设计得非常简单,总的来说,SQLite把一个数据文件分成若干大小相等的页面,然后以B树的形式来组织这 ...
- C语言结构体对齐
1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...
- C/C++ 标准输入输出重定向
转载自:http://www.cnblogs.com/hjslovewcl/archive/2011/01/10/2314356.html 这个对经常在OJ上做题的童鞋们很有用.OJ基本都是用标准输入 ...
- ECharts学习(3)--toolbox(工具栏)
1. toolbox:这是ECharts中的工具栏.内置有导出图片.数据视图.动态类型切换.数据区域缩放.重置五个工具. 2. toolbox中的属性,不包含五个工具.里面最主要的就是feature这 ...
- Servlet中以HashMap存放临时变量,解决跳转新页面请求参数过多时浏览器地址栏超长
具体使用方法如下: 1.在跳转之前将需要的参数串encodeURIComponent后作为参数value,UUID作为key一起POST到Servlet保存到HashMap中: 2.在Servlet发 ...
- 浅谈servlet
刚开始接触servlet的时候,其实不是太理解servlet的,后来经过慢慢摸爬滚打式的的学习,有了一点自己的理解. servlet的产生还要从Java和HTTP说起: Java的servletAPI ...
- checkbox样式更改用户权限操作(MVC)
数据库数据与结构下载(mysql): 链接:http://pan.baidu.com/s/1mhN9Mje 密码:j91p 源码下载: 链接:http://pan.baidu.com/s/1pLbGJ ...
- CsvHelper支持List<T>
/// <summary> /// Csv帮助类 /// </summary> public class CsvHelper { /// <summary> / ...
- ParamTest
package fourth; public class ParamTest { public static void main(String[] args) { // TODO Auto-gener ...
- mysql ,服务器耗时测试
测试一 字段:ID,test,number 电脑配置:8g内存 同时写入超过5w条,就会卡死 错误提示 Fatal error: Allowed memory size of bytes exhaus ...