Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging GNU Make正在使用-j耗尽内存。在那个特殊的时刻它在做什么?_Debugging_Gnu Make - Fatal编程技术网

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

Debugging GNU Make正在使用-j耗尽内存。在那个特殊的时刻它在做什么?,debugging,gnu-make,Debugging,Gnu Make,我正在运行带有-j标志的大GNU Make文件。在某一点上,使进程溢出所有RAM,并导致“分段错误”。如果没有-j标记,则进程将成功完成。当GNU开始消耗内存时,如何知道它在做什么?调试标志(-d)对此问题没有帮助。如果内存不足,则不应将分段错误作为错误消息。如果某个make进程占用了大量内存,然后像那样崩溃,则可能是堆栈溢出 makefile是否可能具有某种递归依赖关系?消耗内存的不是GNU make。它在并行分叉的各个目标中运行命令,这些目标分别消耗内存。这可能就是为什么只有在运行多个并行进

我正在运行带有-j标志的大GNU Make文件。在某一点上,使进程溢出所有RAM,并导致“分段错误”。如果没有-j标记,则进程将成功完成。当GNU开始消耗内存时,如何知道它在做什么?调试标志(-d)对此问题没有帮助。

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


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

消耗内存的不是GNU make。它在并行分叉的各个目标中运行命令,这些目标分别消耗内存。这可能就是为什么只有在运行多个并行进程时才会出现问题。您尝试了
-j2
,但也失败了,对吗


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

您是否正在运行
gmake-j
而没有
-j
的任何参数?在这种情况下,
gmake
可以并行运行尽可能多的进程(可能有数百个或数千个)。这很可能会导致
gmake
或分叉进程中的SEGFULT。如果这就是问题所在,那么限制并行进程的数量,比如

gmake -j 4

粗略估计,这个数字是CPU核心数的两倍。

是的,你说得对,有时我不会收到“SEGFULT”作为错误消息,在这种情况下,我只看到进程被系统终止。现在想不出其他任何事情。你能补充一些关于你的情况的细节吗?你怎么知道会有很多RAM?如果它生成的进程占用所有RAM,我估计如果下一个malloc()返回0,它可能会崩溃。您是否尝试过在禁用OOM killer的情况下运行(假设您在Linux下运行)?您开始使用的确切命令行是什么?