jemalloc内存管理

类linux平台上,用于替代默认的glibc库来管理内存分配的软件很多。其中比较出色的有google 的Tcmalloc ,该软件在mysql和nginx的安装中经常被提到。可以在编译时用指向该lib库,用于替代默认的glibc内存管理。今天在一台测试机上安装tengine时,偶然发现其配置参数里多了一个jemalloc检测项。网上查了下,发现是同Tcmalloc类似的内存管理工具。不过其性能要优于Tcmalloc 。

1、jemalloc安装及与tengine的整合

jemalloc目前的最新版是3.3 ,可以通过面的方式进行编译与下载安装:

wget http://www.canonware.com/download/jemalloc/jemalloc-3.3.0.tar.bz2
tar jxvf jemalloc-3.3.0.tar.bz2
/usr/local/src/jemalloc-3.3.0
./configure
make && make install

这样就完成了安装,其默认程序的安装目录结构如下:

XSLTPROC           : /usr/bin/xsltproc
PREFIX             : /usr/local
BINDIR             : /usr/local/bin
INCLUDEDIR         : /usr/local/include
LIBDIR             : /usr/local/lib
DATADIR            : /usr/local/share
MANDIR             : /usr/local/share/man

在这种情况下,tengine是无法直接检测到jemalloc的 。此可以可以通过将该lib库的路径导入ld文件并重新运行的方法实现,有点类似于tcmalloc的安装。操作如下:

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig

不过上面的方法我并没有测试,我用的是类似于nginx编译时加载pcre包时的方法,通过–with-jemalloc 参数,指定其源文件路径的方法。具体是在tengine编译时,通过如下配置编译:

./configure --prefix=/App/nginx --with-jemalloc=/usr/local/src/jemalloc-3.3.0

注:tengine官方给出的编译方法是后面这种通过指向源代码路径的方式。

2、性能测试

关于jemalloc的性能,我并没有进行测试,但网上早有人对其性能进行过测试。有兴趣的可以看下如下两个链接。

http://locklessinc.com/benchmarks_allocator.shtml

http://blog.csdn.net/yfkiss/article/details/7035579

从上面两个链接上看,jemalloc的性能确实要比tcmalloc和glibc性能要好。

3、 横向总结

jemalloc之前主要被firefox所使用,后来facebook也在其自己的应用上使用了jemalloc 。所以,在tengine的版本中之所以加了对jemalloc的支持,应该很大程序上是受了facebook的影响。除了jemalloc之外,还有几个同类产品,据说功能也不错。现列举出来,有兴趣者可以做一个横向对比。

TLSF  Two-Level Segregate Fit, mainly on RTOS
jemalloc  Jason Evans's malloc, used by firefox
dlmalloc  Doug Lea’s malloc, been around forever
ptmalloc2  Doug Lea’s malloc, extended to support per-thread arenas. Default allocator for glibc2.3
TCMalloc  Google’s malloc, claims to be 6x faster than ptmalloc2
nedmalloc  claims to be faster than tcmalloc
Hoard  also claims to be very fast 

jemalloc内存管理》有1条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注