malloc在Linux中挂起

时间:2010-06-17 14:58:37

标签: c++ c linux malloc suse

我在具有16 G RAM和2个四核CPU的计算机上使用SUSE 10 Linux。 有8个进程正在做一些工作(CPU密集型/网络i / o)。其中4个有内存泄漏(这些是测试条件,所以这里没有泄漏问题)。 所有进程占用的总空间大约为15.4 G,系统中只有200 MB是免费的。 事情好几个小时。但是在那之后malloc挂起(对于没有内存泄漏的进程)。 它停留超过4分钟(注意CPU不是100%,但io已经显着上升)。 现在挂起的进程没有问题(它没有破坏内存)。 malloc在做什么? (它是否正在尝试进行碎片整理或建立交换空间)。

任何指针?

3 个答案:

答案 0 :(得分:4)

如果malloc()只需要很长时间,那么您可能正在遍历一个零碎的免费列表,其中许多条目已被换出。这与低CPU,高IO和有限的可用RAM一致。

有关malloc()实施的更多信息(包括理解碎片化的免费列表),维基百科文章很好:http://en.wikipedia.org/wiki/Malloc#Implementations

哦,即使在测试环境中也无法接受内存泄漏。正如你所看到的,他们干扰了(据你所知)没有泄漏的程序,并且花费你的时间。

答案 1 :(得分:1)

这可能很烦人,但我建议在阻止进程的过程中使用Valgrind。可能存在之前未检测到的错误。至少,你可能知道发生了什么。但是,几个小时可能会变成几天:/

答案 2 :(得分:1)

在你的机器短缺寿命RAM之前。现在,您的malloc超出了机器的16G限制,系统开始交换。 但是,正如PierreBdR所暗示的那样检查您的应用程序当然是个好主意。