昨日、ソースからROOTパッケージをコンパイルしようとしていました。6コアのモンスターマシンでコンパイルしていたので、先に進み、を使用して複数のコアを使用してビルドすることにしましたmake -j 6
。コンパイルは最初はスムーズで非常に高速でしたが、ある時点でmake
1つのコアで100%CPUを使用してハングしました。
私はいくつかのグーグル検索を行い、ROOT掲示板でこの投稿を見つけました。このコンピューターを自分で作ったので、ヒートシンクを適切に適用しておらず、CPUが過熱しているかどうかが心配でした。残念ながら、ここには冷蔵庫がありません。
lm-sensors
パッケージをインストールし、make -j 6
再度実行しましたが、今回はCPU温度を監視しました。温度は高くなりましたが(60 Cに近い)、高温または臨界温度を超えることはありませんでした。
実行しようとしましたmake -j 4
がmake
、コンパイル中に別の場所で再びハングしました。
最終的には、実行中にコンパイルmake
しましたが、うまくいきました。私の質問は:なぜそれがぶら下がっていたのですか?2つの異なるスポットで停止したという事実により、何らかの競合状態が原因であると推測されmake
ますが、-j
オプションを提供しているため、すべてを適切な順序で取得するのに十分賢いはずです。
-j >1
ます。
$(shell ...)
結局、それは単に変数の初期化にあり、最終的にはからの入力を待ってstdin
いたコマンドを実行していたことがわかりました。これは、変数が空で、ファイル引数がコマンドに渡されなかった場合に発生していました。
strace -p <pid>
、何を探しているのかを見つけられるかどうかを確認します。straceはsyscallのみを表示します(関数呼び出しは表示しません)が、特定のファイルを見ている間または特定のファイルを表示しているときに回転している場合、貴重な情報を提供できます。