Ieri stavo cercando di compilare il pacchetto ROOT dal sorgente. Da quando lo stavo compilando su una macchina mostro a 6 core, ho deciso di andare avanti e costruire usando più core usando make -j 6
. La compilazione è stata semplice e molto veloce all'inizio, ma a un certo punto si è make
bloccata usando la CPU al 100% su un solo core.
Ho cercato su Google e ho trovato questo post nelle bacheche dei messaggi ROOT. Da quando ho costruito questo computer da solo, ero preoccupato di non aver applicato correttamente il dissipatore di calore e la CPU si stava surriscaldando o qualcosa del genere. Sfortunatamente, non ho un frigorifero qui al lavoro in cui posso attaccarlo. ;-)
Ho installato il lm-sensors
pacchetto ed eseguito di make -j 6
nuovo, questa volta monitorando la temperatura della CPU. Sebbene sia diventato alto (vicino a 60 ° C), non ha mai superato la temperatura alta o critica.
Ho provato a correre make -j 4
ma ancora una volta ho make
appeso durante la compilazione, questa volta in un punto diverso.
Alla fine, ho compilato solo in esecuzione make
e ha funzionato bene. La mia domanda è: perché era sospeso? A causa del fatto che si è fermato in due punti diversi, immagino che fosse dovuto a una sorta di condizione di gara, ma penso che make
dovrebbe essere abbastanza intelligente da ottenere tutto nel giusto ordine poiché offre l' -j
opzione.
-j >1
.
$(shell ...)
stava infine eseguendo un comando in attesa di input dastdin
. Ciò è stato causato quando una variabile era vuota e nessun argomento di file è stato passato al comando.
strace -p <pid>
e vedi se riesci a scoprire cosa sta cercando / per. strace ti mostrerà solo syscall (non chiamate di funzione), ma potrebbe comunque darti informazioni preziose se gira mentre guarda o per un determinato file.