GNU Make使用-j耗尽内存。在那个特定时刻它在做什么?

时间:2013-04-03 12:16:39

标签: debugging gnu-make

我正在使用-j标志运行大型GNU Make文件。在某一点上,Make进程溢出所有RAM并因“分段错误”而崩溃。没有-j标志,该过程完成sucessufly。如何知道什么是GNU Make开始吃内存时做的事情?调试标志(-d)没有帮助解决这个问题。

3 个答案:

答案 0 :(得分:0)

如果内存不足,则不应将分段错误视为错误消息。如果某些make进程占用了大量内存,那么就像崩溃一样,它可能是堆栈溢出。

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

答案 1 :(得分:0)

不是GNU make就是在吃记忆。它正在运行各种目标中的命令,这些目标是并行分叉的,它们单独占用内存。这可能就是为什么只有在运行多个并行进程时才会出现问题的原因。你试过-j2但也失败了吧?

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

答案 2 :(得分:0)

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

来限制并行进程的数量
gmake -j 4

对该数字的粗略估计是CPU核心数量的两倍。