今日何かを構築するとき、私は次のように実行することにしmake
ました
$ make -j
おそらくcabal
、-j
デフォルトが妥当な制限に設定されている場合など、他のプログラムとは習慣がない。
約20秒後、デスクトップ全体が停止して停止します。活動のさまざまな兆候を探します。ファンは回転しません。HDDライトは緑色に点灯していますが、ディスクアクティビティが聞こえません。うーん。10分の沈黙の後、ようやく何年も前に行った最初のキー操作に対する応答がわかり、ディスクのスラッシングのあまりにも馴染みのある音も聞こえ始めます。20分後、この応答しないマシンの端末にゆっくりと進もうとすると、私は陥没してREISUBを使用しました。
最初は、関係のないデスクトップアプリケーションが原因であると考えました。これは、長い間、インタラクティブなbashセッションにメモリ制限を課して、このような状況に身を置くことができなかったためです。しかし/var/log/syslog
、別の話をします。OOMキラーは、疑わしくパックされ、処理されているいくつかのps
ダンプを残しました!c++
cc1plus
これらのダンプの1つの周波数分析を次に示します。
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
だから私はGNU makeのmanページをチェックします:(強調を追加)
-j [jobs]、-jobs [= jobs]同時に実行するジョブ(コマンド)の数を指定します。-jオプションが複数ある場合は、最後のオプションが有効です。 引数なしで-jオプションを指定した場合、makeは同時に実行できるジョブの数を制限しません。
私は、問題を再現できるかどうかを確認するには消極的だ(私が行うとき、それは痛い、医師をこれを ...)が、調査の結果は、これまでにホームランのように見える:明らかに、make -j
そして得られたプロセスの数百人が持っている必要がありますとなってハングし、ディスクスラッシングの原因。そうは言っても、インターネットを検索しても、それに対する警告はあまりわかりません。私は結論に飛びついていますか?
でmake -j
、それは私には思われるほど危険な? もしそうなら、なぜそこにあるのですか、そしてそれをばか者に証明するために何ができるでしょうか?
alias make="make -j4"
する必要をなくすためにを追加することを検討してい-jN
ますが、考えられるすべての結果をまだ考えていません...