2012-02-16 36 views
1

我正在使用4核cpu的kubuntu 10.10。當我使用'make -j2'來構建cpp項目時,2核心的使用率成爲100%,桌面環境變得沒有反應,並且構建過程沒有進展。GNU'make -j'會導致CPU高負載和桌面無響應

版本信息:

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

如何解決這個問題呢?謝謝。

+0

它是超線程還是4核物理內核? – 2012-02-16 06:01:18

+0

@JesusRamos我相信它是4個物理核心:) – 2012-02-16 06:53:30

+0

它只發生在Ubuntu上嗎?由於正在使用2個內核,因此您的桌面應該仍然非常敏感 – 2012-02-17 05:09:45

回答

2

這裏沒有足夠的信息給你一個明確的答案。首先不清楚這是否僅在使用-j2運行時纔會發生。如果你沒有平行運行(no -j)會怎麼樣?當你說「2核的CPU使用率[達到] 100%」時,這些CPU上發生了什麼?如果您在另一個終端上運行「頂部」,然後開始構建,頂部顯示的是什麼?

或者,如果您運行「make -d -j2」,在CPU達到100%之前,哪個程序正在運行?

由於您有4個內核,只有2個處於繁忙狀態,因此桌面無響應以及提示出現其他問題而非CPU使用情況。也許有東西咀嚼所有的RAM?系統會在一段時間後回來(表示OOM殺手參與並踩踏某物)?

如果這些都沒有幫助,你可以在strace下運行make,就像「strace -f make -j2」,看看你是否能弄清楚發生了什麼。這會產生一兩或兩個輸出,但是如果在CPU掛起時,你會看到一遍又一遍的重複,你可能會得到一個提示。

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

  1. 這不是讓所有,而是任何make命令正在運行,這只是使你的系統崩潰。你暗示它只是編譯C++代碼,所以看起來似乎不太可能,除非在某個地方有bug。
  2. Make正在無限遞歸。 Make將重建自己的makefile,加上任何包含的makefile,然後重新自行執行。如果你不小心定義包括makefile在內的重建規則,make可以決定它們總是過時並且永遠重建/ rexec。
  3. 別的東西

希望上面的提示將設置你發現這是怎麼回事的道路。

0

您確定該項目已準備好進行並行編譯嗎?也許先決條件沒有正確排序。

如果您只用「make」編譯完成了項目?如果到最後是目標依賴問題。