2012-02-16 14 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つの物理コアを持つ2つのコアですか? –

+0

@JesusRamos私はそれが4つの物理的なコアだと信じて:) –

+0

それはUbuntuでのみ起こるか? 2つのコアが使用されているので、あなたのデスクトップは依然としてかなり応答しているはずです –

答えて

2

確かな答えを得るのに十分な情報はありません。まず、-j2を指定して実行した場合にのみ起こるかどうかは不明です。並列性を持たない(no-j)を実行するとどうなりますか? 「2コアのCPU使用率が100%になる」と言うと、そのCPUで何が起こっていますか?別の端末で「top」を実行してビルドを開始すると、何が上に表示されますか?

"make -d -j2"を実行すると、CPUが100%になる直前にどのプログラムが実行されていますか?

4つのコアがあり、2つしかビジーではないため、デスクトップが応答しないという事実も、CPU使用率ではなく他の問題を示唆しています。たぶん何かあなたのRAMを噛んでいるのでしょうか?しばらくするとシステムが戻ってきますか(OOMの殺人犯が関与して何かを踏んだことを示しています)?

もしそれが役に立たないなら、strace -m make -j2のようなmakeを実行して、何が起こっているのかを知ることができます。これはメートルトンまたは2つの出力を生成しますが、CPUが固定されている場合、何かが何度も繰り返し実行されていることがヒントを得るかもしれないことがわかります。

  1. それは全然しないですが、むしろコマンドmakeがそれはちょうどあなたのシステムをダウンさせています実行されているものは何でも:

    基本的に私は、これらの可能性を見ることができます。あなたはC++コードをコンパイルしているだけで、どこかにバグがないかぎりそうはないと思われます。

  2. Makeは無限に再帰します。 makeはそれ自身のmakefileとインクルードされたmakefileを再構築し、再実行します。インクルードされたメイクファイルを再構築するためのルールを細かく定義するのではなく、makeがいつも古くなっていると判断し、/ rexecを永遠に再構築することができます。
  3. 何か他

うまくいけば、上記のヒントは何が起こっているのを発見への道にあなたを設定します。

0

プロジェクトが並列コンパイルの準備ができていますか?おそらく、前提条件が正しく発注されていない可能性があります。

"make"だけでプロジェクトをビルドすると、コンパイルが完了しますか?最終的に目標依存性の問題が発生した場合

関連する問題