jemalloc的使用
来源:互联网 发布:java continue label 编辑:程序博客网 时间:2024/06/06 02:53
jemalloc起源于Jason Evans 2006年在BSDcan conference发表的论文:A Scalable Concurrent malloc Implementation for FreeBSD
jason认为phkmalloc(FreeBSD’s previous malloc implementation by Kamp (1998))没有考虑多处理器的情况,因此在多线程并发下性能低下(事实如此),而jemalloc适合多线程下内存分配管理。
2. jason在多处理器下的一个实验
x轴是线程数,y轴是性能。
在单线程下,彼此相差不多,dlmalloc(Doug Lea’s malloc, been around forever)稍占优势。
在多线程下,dlmalloc和pkgmalloc性能急剧下降,而jemalloc在线程数和处理器数一致的时候,性能达到最高,线程数继续增加能保持稳定。
3. 原理
arena+TLS
arena即小块内存,指将大内存划分成多个小内存来管理
TLS(Thread-local storage),即线程局部缓存
回过头来看看tcmalloc,惊人的一致。
经过测试,tcmalloc和jemalloc在实际应用中不相伯仲,一个比较早的测试结果:
valgrind检测不出tcmalloc和jemalloc的内存泄露,但是tcmalloc有gprof可以使用,还不清楚jemalloc有没有什么可用的检测工具
4. 安装使用(jemalloc当前版本2.2.5)
安装:
wget http://www.canonware.com/download/jemalloc/jemalloc-2.2.5.tar.bz2 .
tar -jxvf jemalloc-2.2.5.tar.bz2
cd jemalloc-2.2.5/ && ./configure && make && make install
ldconfig
使用:链接即可使用
写一个简单的测试程序client.cpp
g++ -o client client.cpp -ljemalloc
使用ldd查看程序所需的共享库
$ ldd client
linux-gate.so.1 => (0x00e18000)
libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00110000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00322000)
libm.so.6 => /lib/libm.so.6 (0x0012d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002ed000)
libc.so.6 => /lib/libc.so.6 (0x00153000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0080f000)
libdl.so.2 => /lib/libdl.so.2 (0x0069e000)
/lib/ld-linux.so.2 (0x008ab000)
以上方式是使用动态库,不推荐,更好地方式是使用静态库libjemalloc.a*
5、使用静态库
如果要使用静态库,在编译jemalloc时,需要重新设置,
./configure --with-jemalloc-prefix
make
将jemalloc.h和libjemalloc.a 拷到合适的地方。
此时的jemalloc.h 的宏定义会与之前编译的jemalloc.h有少许的不同。
因为此时 libjemlloc.a 文件中的 malloc free realloc 变成了 yesmalloc, yesfree, yesrealloc。这是为了不能与glic中的malloc,free,realloc 重名,否则无法编译通过。
在自己写的程序中,需要将 malloc free realloc 替换成 je_malloc, je_free, je_realloc. (jemalloc.h 会将 je_malloc, je_free, je_realloc. 替换成 yesmalloc, yesfree, yesrealloc)
在编译时,加入-DJEMALLOC_NO_DEMANGLE -static
- jemalloc的使用
- Jemalloc free的过程
- jemalloc
- jemalloc
- jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- 更好的内存管理-jemalloc
- jemalloc横向分析(三) arena_run_split_large使用分配的chunk存放tcache
- jemalloc横向分析(四) tcache分配内存中使用到的位图bitmap
- 在windows下使用jemalloc库
- 强大的多线程内存分配器jemalloc
- Redis cli gcc: Command not found cc jemalloc/jemalloc等使用异常
- content-type引发的CDN错误
- 4.19&&4.20
- 动态添加拍照图片、本地图片以及文件
- 图像亮度变换函数
- cms系统是什么意思
- jemalloc的使用
- 求两个整数的最大公约数及其应用
- HDU 1285 【简单拓扑】
- 信号量与管程
- JavaScript位操作及其简单应用
- Web应用中大部分跳转路径如何书写
- 客运综合管理系统项目解析-领导查询(模块)-废票查询
- android不为人知的工具集合
- Kth Largest Element in an Array