2

我正在运行带有 -j 标志的大型 GNU Make 文件。在某一时刻,Make 进程溢出所有 RAM 并因“分段错误”而下降。如果没有 -j 标志,进程将成功完成。如何知道 GNU Make 在开始吃内存时在做什么?调试标志 (-d) 对这个问题没有帮助。

4

3 回答 3

1

gmake -j您是否在没有任何争论的情况下跑步-j?在这种情况下gmake,可以并行运行尽可能多的进程(可能有数百或数千个)。这很可能导致gmake分叉进程或分叉进程中的段错误。如果这是问题所在,请限制并行进程的数量,例如,

gmake -j 4

粗略估计的数量是 CPU 内核数量的两倍。

于 2015-05-18T14:01:47.813 回答
0

如果内存不足,则不应将分段错误作为错误消息。如果某些 make 进程正在消耗大量内存,然后像那样崩溃,则可能是堆栈溢出。

makefile 是否可能具有某种递归依赖关系?

于 2013-04-03T12:31:28.147 回答
0

吃内存的不是 GNU make。它在各个目标中运行命令,这些目标并行分叉,分别消耗内存。这可能就是为什么仅当您使用多个并行进程运行时才会出现问题的原因。你已经尝试过-j2,但也失败了,对吧?

如果您使用remake,当您的进程失败时,您将看到失败的 make 命令以及调用它的目标堆栈。

于 2015-05-18T10:23:01.717 回答