Gestern habe ich versucht, das ROOT- Paket aus dem Quellcode zu kompilieren . Da ich es auf einem 6-Kern-Monstercomputer kompilierte, entschied ich mich, mit mehreren Kernen zu bauen make -j 6
. Die Kompilierung verlief zunächst reibungslos und sehr schnell, aber irgendwann make
hing die Verwendung von 100% CPU auf nur einem Kern.
Ich habe ein bisschen gegoogelt und diesen Beitrag in den ROOT- Foren gefunden . Da ich diesen Computer selbst gebaut habe, war ich besorgt, dass ich den Kühlkörper nicht richtig angebracht habe und die CPU überhitzt ist oder so. Leider habe ich hier bei der Arbeit keinen Kühlschrank, in den ich ihn stecken kann ;-)
Ich installierte das lm-sensors
Paket und lief make -j 6
erneut, diesmal mit Überwachung der CPU-Temperatur. Obwohl es hoch wurde (nahe 60 ° C), überschritt es nie die hohe oder kritische Temperatur.
Ich habe versucht zu rennen, habe make -j 4
aber make
irgendwann während des Kompilierens wieder aufgehängt, diesmal an einer anderen Stelle.
Am Ende habe ich nur das Laufen kompiliert make
und es hat gut funktioniert. Meine Frage ist: Warum hing es? Aufgrund der Tatsache, dass es an zwei verschiedenen Stellen anhielt, würde ich vermuten, dass es an einer Art Rennbedingung lag, aber ich würde denken, make
dass es klug genug sein sollte, um alles in die richtige Reihenfolge zu bringen, da es die -j
Option bietet .
-j >1
.
$(shell ...)
die letztendlich einen Befehl ausführte, der auf die Eingabe von wartetestdin
. Dies wurde verursacht, wenn eine Variable leer war und keine Dateiargumente an den Befehl übergeben wurden.
strace -p <pid>
prüfen, ob Sie herausfinden können, wonach er sucht. strace zeigt Ihnen nur Systemaufrufe (keine Funktionsaufrufe), aber es kann Ihnen trotzdem wertvolle Informationen geben, wenn es sich dreht, während Sie nach einer bestimmten Datei suchen.