Ontem eu estava tentando compilar o pacote ROOT a partir do código-fonte. Desde que eu estava compilando em uma máquina monstro de 6 núcleos, decidi ir em frente e construir usando vários núcleos usando make -j 6
. A compilação foi suave e muito rápida no início, mas em algum momento make
travou usando 100% da CPU em apenas um núcleo.
Eu pesquisei no Google e encontrei este post nos quadros de mensagens do ROOT. Desde que eu mesmo construí este computador, fiquei preocupado por não ter aplicado corretamente o dissipador de calor e a CPU estar superaquecendo ou algo assim. Infelizmente, não tenho uma geladeira aqui no trabalho onde posso colocá-la. ;-)
Instalei o lm-sensors
pacote e executei make -j 6
novamente, desta vez monitorando a temperatura da CPU. Embora tenha ficado alto (perto de 60 ° C), nunca passou da temperatura alta ou crítica.
Tentei correr, make -j 4
mas novamente fiquei make
suspenso em algum momento durante a compilação, desta vez em um local diferente.
No final, eu compilei apenas rodando make
e funcionou bem. Minha pergunta é: Por que estava pendurado? Devido ao fato de ter parado em dois pontos diferentes, acho que foi devido a algum tipo de condição de corrida, mas acho que make
deveria ser inteligente o suficiente para colocar tudo na ordem certa, pois oferece a -j
opção.
-j >1
.
$(shell ...)
estava executando um comando que estava aguardando a entrada destdin
. Isso foi causado quando uma variável estava vazia e nenhum argumento do arquivo foi passado para o comando.
strace -p <pid>
e veja se você consegue descobrir o que ele está procurando /. O strace mostrará apenas syscalls (não chamadas de função), mas ainda poderá fornecer informações valiosas se estiver girando enquanto você olha ou procura um arquivo específico.