libumem是2001年由SUN的工程师Jeff Bonwick和Jonathan Adams开发的一个对应用程序进行内存管理的动态链接库。简单地讲,libumem通过提供一组替换C标准库的内存分配函数(malloc,free,realloc等等),从而可以使用户更容易发现和解决关于内存管理的bug。从Solaris 9(Update 3)开始,libumem作为Solaris操作系统的一个标准库提供给应用程序使用。现在libumem已经被移植到其它的平台上,这个网站(https://labs.omniti.com/labs/portableumem)不仅介绍了关于libumem的移植,并且还提供了源代码。从今天起,我打算写一组系列文章,通过对libumem的源代码分析,介绍如何使用libumem以及它的工作原理。
首先,我介绍一下如何使用libumem。这里有两个方法:
(1)通过使用LD_PRELOAD环境变量:
LD_PRELOAD=libumem.so;export LD_PRELOAD
这样就使用户程序使用的是libumem中提供的内存管理函数,而不是C标准库的函数。关于LD_PRELOAD,感兴趣的读者可以参考stackoverflow上的这篇帖子:http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick。
(2)在链接程序时加上 -lumem选项。
当应用程序运行后,我们可通过以下简单的Dtrace脚本去检查程序是否使用的是libumem:
#!/usr/sbin/dtrace -qs
pid$1::malloc:entry
{
trace(probemod);
}
这个脚本会输出使用哪个模块的malloc函数,如果输出的模块名是类似于“libumem.so.1”,那么就证明程序已经使用libumem了,否则就需要检查一下,看看问题在哪里。
您好,有libumem相关资料,最近在研究这个库,非常感谢
已经研究了几天umem,现在还没有入门,相关介绍太少了,sun公司的资料已经在oracle,没有付费账户没法看,一个付费账户要几十万,对umem有兴趣但是找到的资料特别少
期盼大神能给些资料,让后辈少走一些弯路,非常感谢,可以发我邮箱1427353675@qq.com
> 已经研究了几天umem,现在还没有入门,相关介绍太少了,sun公司的资料已经在oracle,没有付费账户没法看,一个付费账户要几十万,对umem有兴趣但是找到的资料特别少
你研究umem的目标是什么?是会用就可以?还是要移植?还是自己学习?
(1)如果是会用就可以?那么参考我这篇文章就够了;
(2)如果要移植,或是自己学习,源码在这里:https://github.com/illumos/illumos-gate/tree/master/usr/src/lib/libumem。
我也没有任何资料,而且也好几年没碰过了,抱歉。
感谢这么快就回复了,目标是吃透这个内存库,但是没有理论框架直接啃源码是一件很困难的事情,主要是连官方文档都找不到了。
我在网上搜了一下,觉得这个视频应该会有帮助:https://www.youtube.com/watch?v=IznEq2Uf2xk。
不胜感激哈
谢谢前辈的帮忙,虽然我没有去看这个视频(因为访问不了),但是依然感谢前辈的帮忙。
1,由于工作需要,通过几周的投入,目前对umem源码内存管理部分已经分析完毕,对umem的内存管理原理已经比较清楚了。umem看完后不得不感叹jeff bonwick & jonata
n adams的创造性,向他们致敬。
2,后续有空我会写个umem的原理分析,有需要的小伙伴先去看umem的论文,研究透了这个论文再去看源码会事半功倍,尽管看了之后还是困惑重重,但是只要坚持投入一定可以看懂;
https://www.usenix.org/legacy/event/usenix01/full_papers/bonwick/bonwick_html/index.html
3,umem对内存碎片化的处理非常好,要明显优于glibc,tcmalloc,但是其也存在严重VMA碎片问题,作者是2001年写的这个库,那个时候内存比较小,所以体现不出来,现在2022年了设备内存多达32G,64G,就会出现明显的问题了。
接上:
4,目前网上关于umem的资料已经没有了,sun公司早已经并入了oracle公司,而jeff bonwick已经离开oracle多年了,我只找到了2中这一份资料,中文资料几乎没有,大家不怎么去用umem来管理内存,只有有特殊用途的场景可能会需要使用。umem虽然2001写的,但是其思想是非常超前的,非常有创造性。
写了一篇blog:libumem内存不释放问题剖析,有兴趣可以看看。https://blog.csdn.net/u010136054/article/details/123163530?spm=1001.2014.3001.5501