jemalloc内存管理
类linux平台上,用于替代默认的glibc库来管理内存分配的软件很多。其中比较出色的有google 的Tcmalloc ,该软件在mysql和nginx的安装中经常被提到。可以在编译时用指向该lib库,用于替代默认的glibc内存管理。今天在一台测试机上安装tengine时,偶然发现其配置参数里多了一个jemalloc检测项。网上查了下,发现是同Tcmalloc类似的内存管理工具。不过其性能要优于Tcmalloc 。
1、jemalloc安装及与tengine的整合
jemalloc目前的最新版是3.3 ,可以通过面的方式进行编译与下载安装:
1wget http://www.canonware.com/download/jemalloc/jemalloc-3.3.0.tar.bz2
2tar jxvf jemalloc-3.3.0.tar.bz2
3/usr/local/src/jemalloc-3.3.0
4./configure
5make && make install
这样就完成了安装,其默认程序的安装目录结构如下:
1XSLTPROC : /usr/bin/xsltproc
2PREFIX : /usr/local
3BINDIR : /usr/local/bin
4INCLUDEDIR : /usr/local/include
5LIBDIR : /usr/local/lib
6DATADIR : /usr/local/share
7MANDIR : /usr/local/share/man
在这种情况下,tengine是无法直接检测到jemalloc的 。此可以可以通过将该lib库的路径导入ld文件并重新运行的方法实现,有点类似于tcmalloc的安装。操作如下:
1echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
2/sbin/ldconfig
不过上面的方法我并没有测试,我用的是类似于nginx编译时加载pcre包时的方法,通过–with-jemalloc 参数,指定其源文件路径的方法。具体是在tengine编译时,通过如下配置编译:
1./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之外,还有几个同类产品,据说功能也不错。现列举出来,有兴趣者可以做一个横向对比。
1TLSF Two-Level Segregate Fit, mainly on RTOS
2jemalloc Jason Evans's malloc, used by firefox
3dlmalloc Doug Lea’s malloc, been around forever
4ptmalloc2 Doug Lea’s malloc, extended to support per-thread arenas. Default allocator for glibc2.3
5TCMalloc Google’s malloc, claims to be 6x faster than ptmalloc2
6nedmalloc claims to be faster than tcmalloc
7Hoard also claims to be very fast
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/tengine-jemlloc/2313.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.