Makefile GNU';make-j';导致高cpu负载和桌面无响应

Makefile GNU';make-j';导致高cpu负载和桌面无响应,makefile,Makefile,我正在使用Kubuntu10.10和4核cpu。当我使用“make-j2”构建cpp项目时,2 core的cup使用率将达到100%,桌面环境将没有响应,构建过程也没有进展 版本信息: The GNU make's version is 3.81 gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 如何解决这个问题?谢谢。您确定该项目已准备好并行编译吗?可能先决条件的顺序不正确 如果您只是“完成”编译来构建项目?如果它结束了,那就是目标依赖性问

我正在使用Kubuntu10.10和4核cpu。当我使用“make-j2”构建cpp项目时,2 core的cup使用率将达到100%,桌面环境将没有响应,构建过程也没有进展

版本信息:

The GNU make's version is 3.81 
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)

如何解决这个问题?谢谢。

您确定该项目已准备好并行编译吗?可能先决条件的顺序不正确


如果您只是“完成”编译来构建项目?如果它结束了,那就是目标依赖性问题。

这里没有足够的信息给你一个明确的答案。首先,不清楚是否只有在使用-j2运行时才会发生这种情况。如果运行时没有并行性(no-j),该怎么办?当你说“2核的CPU使用率[达到]100%”时,这些CPU上发生了什么?如果您在另一个终端中运行“top”,然后开始构建,那么top中会显示什么

或者,如果您运行“make-d-j2”,在CPU运行到100%之前,哪些程序正在运行

桌面没有响应这一事实也暗示了其他一些问题,而不是CPU使用情况,因为您有4个内核,只有2个正忙。也许是什么东西把你的公羊都吃掉了?系统是否在一段时间后恢复(表明OOM杀手参与并踩踏了什么)

如果这些都没有帮助,您可以在strace下运行make,比如“strace-fmake-j2”,看看您是否能够弄清楚到底发生了什么。这将产生一到两公吨的输出,但如果当CPU被锁定时,您看到一些东西一遍又一遍地运行,您可能会得到一个提示

基本上我可以看到这些可能性:

  • 根本不是make,而是运行任何make命令都会导致系统崩溃。你暗示它只是编译C++代码,所以看起来不太可能,除非某处有bug。
  • Make是无限递归的。Make将重建自己的makefile,以及包含的任何makefile,然后重新执行自己。如果您不仔细定义重建包含的makefile的规则,make可以决定它们总是过时的,并且永远重建/rebuild/rexec
  • 别的

  • 希望上面的提示能让你发现发生了什么。

    是2个超线程内核还是4个物理内核?@JesusRamos我相信是4个物理内核:)这只发生在Ubuntu上吗?由于使用了2个内核,所以您的桌面应该仍然很漂亮responsive@JesusRamos不,它也发生在我们新的CentOS构建机器上。