在现有的大型代码中使用jemalloc

6

我有一大段代码分布在许多文件中,目前该代码正在使用普通的 malloc。

我希望实现 Jemalloc 以获得更好的性能,并且我还想使用 Jemalloc 的内存分析器来了解每个分配点在代码中如何发生以及具体位置在哪里。

我已经尝试了三个星期,请求您的帮助。

提前致谢。

2个回答

11

在不添加前缀的情况下构建jemalloc后,你将拥有一个重新实现了所有malloc族函数的共享库。

假设:Linux环境

如果你的应用程序在单个终端中运行,可以使用LD_PRELOAD环境变量,在运行应用程序之前预加载jemalloc.so。类似这样:

export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc-build/lib/jemalloc.so.1

为了使所有应用程序受到更改的影响,您可以在文件/etc/ld.so.preload中添加一行路径指向您的库。(这个方法在基于Debian的系统中可以确定地使用,但在其他系统上也可能适用)


你是如何安装jemalloc的?你从哪里获取jemalloc.so.1文件的? - Prasanta Barman
很久以前,抱歉。您需要编译Jemalloc。 - Iulius Curt
如果有帮助的话,通常可以省略路径和/或版本号,前提是库已经以传统方式安装在众所周知的位置。加载器将按照通常的方式搜索其配置的任何路径(请参阅 ld.so man 页面)。通常会从未命名的文件名创建符号链接指向库的最新版本,例如jemalloc.so -> jemalloc.so.2。 - sengi

1
我已经在/usr/local中安装了jemalloc,因此它超出了“正常”的库路径。
安装程序为我创建了一个shell,以使用jemalloc库启动程序。
从某种意义上说,它自动化了Iulius上面描述的过程,但仅针对我想要执行的程序使用jemalloc。如果这是预期的用途,则可以执行以下操作:
首先,请检查是否在您的路径中存在该小脚本:
me@mypc /root #which jemalloc.sh

/usr/local/bin/jemalloc.sh

如果存在,你可以通过以下方式直接执行你的程序:

me@mypc /root #jemalloc.sh your-program your-program-arguments &

你可以阅读 /usr/local/bin/jemalloc.sh 来验证它使用了与Iulius描述的类似方法。

me@mypc /root #jemalloc-config --help 将帮助你查看你的jemalloc是如何编译的, me@mypc /root #jemalloc-config --version 则会显示你的jemalloc版本。

这样,你就可以验证你的程序是否能够正确地使用jemalloc而无需重新编译它们。然后你可以做出最终决定。

George.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接