1

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

任何指针?

4

3 回答 3

4

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

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

哦,内存泄漏是不可接受的,即使在测试环境中也是如此。如您所见,它们正在干扰(据您所知)没有泄漏的程序,并浪费您的时间。

于 2010-06-17T15:14:57.270 回答
1

在您的机器内存不足之前。现在您的 malloc 超出了您机器的 16G 限制,并且您的系统开始交换。但是按照 PierreBdR 的提示检查您的应用程序肯定是一个好主意。

于 2010-06-17T15:17:42.110 回答
1

It might be annoying, but I would recommend using Valgrind on the process that blocks. There might be errors you didn't detect before. At least, you might have an idea of what is happening. However, the few hours might become days :/

于 2010-06-17T15:01:49.353 回答