Ayer estaba tratando de compilar el paquete ROOT desde la fuente. Como lo estaba compilando en una máquina monstruo de 6 núcleos, decidí seguir adelante y construir usando múltiples núcleos make -j 6
. La compilación se realizó sin problemas y realmente rápido al principio, pero en algún momento se make
bloqueó usando 100% de CPU en un solo núcleo.
Busqué en Google y encontré esta publicación en los foros de ROOT. Desde que construí esta computadora, me preocupaba no haber aplicado correctamente el disipador de calor y la CPU se estaba sobrecalentando o algo así. Desafortunadamente, no tengo un refrigerador aquí en el trabajo en el que pueda meterlo. ;-)
Instalé el lm-sensors
paquete y corrí make -j 6
nuevamente, esta vez monitoreando la temperatura de la CPU. Aunque se puso alto (cerca de 60 C), nunca pasó la temperatura alta o crítica.
Traté de correr, make -j 4
pero nuevamente make
colgué en algún momento durante la compilación, esta vez en un lugar diferente.
Al final, compilé simplemente corriendo make
y funcionó bien. Mi pregunta es: ¿por qué estaba colgando? Debido al hecho de que se detuvo en dos puntos diferentes, supongo que se debió a algún tipo de condición de carrera, pero creo que make
debería ser lo suficientemente inteligente como para tener todo en el orden correcto, ya que ofrece la -j
opción.
-j >1
.
$(shell ...)
finalmente estaba ejecutando un comando que estaba esperando la entrada destdin
. Esto se produjo cuando una variable estaba vacía y no se pasaron argumentos de archivo al comando.
strace -p <pid>
y ver si puede averiguar qué está mirando / buscando. strace solo le mostrará llamadas al sistema (no llamadas a funciones), pero aún podría brindarle información valiosa si está girando mientras mira o busca un archivo en particular.