Hoy temprano, cuando construía algo, decidí correr makecomo
$ make -j
tal vez por costumbre con otros programas, como cabaldonde el valor -jpredeterminado es un límite razonable.
Unos 20 segundos después, todo mi escritorio se detiene . Busco varios signos de actividad. No hay fans girando. La luz del HDD es de color verde sólido, pero no escucho actividad en el disco. Hmmmmm Después de 10 minutos de silencio, finalmente veo una respuesta a la primera pulsación de tecla que hice hace años, y también empiezo a escuchar el sonido demasiado familiar del golpeteo del disco. 20 minutos después de tratar de entrar lentamente en una terminal en esta máquina que no respondía, cedí y usé REISUB.
Al principio, pensé que una aplicación de escritorio no relacionada debía haber sido la culpable, porque hacía mucho tiempo que tenía límites de memoria colocados en sesiones de bash interactivas para evitar que me pusiera exactamente en este tipo de situación. Pero /var/log/syslogcuenta una historia diferente; el asesino OOM dejado atrás algunos psvertederos que son sospechosamente embalan con c++y cc1plusprocesos!
Aquí hay un análisis de frecuencia de uno de esos vertederos:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Así que verifico la página de manual de GNU make: (énfasis agregado)
-j [trabajos], --jobs [= trabajos] Especifica el número de trabajos (comandos) para ejecutar simultáneamente. Si hay más de una opción -j, la última es efectiva. Si la opción -j se proporciona sin un argumento, make no limitará el número de trabajos que pueden ejecutarse simultáneamente.
Soy reacio a ver si puedo reproducir el problema (Doctor, me duele cuando hago esto ...) , pero los resultados de la investigación hasta ahora parecen ser un jonrón: Claramente, make -jy los cientos de procesos resultantes deben tener ha sido la causa de la caída y el golpeteo del disco. Dicho esto, buscando en Internet, no puedo encontrar muchas advertencias en su contra. ¿Estoy llegando a conclusiones?
¿Es make -jtan peligroso como me parece? Si es así, ¿por qué demonios está allí y qué se puede hacer para que sea a prueba de idiotas?
makelas instalaciones propias y hágalo export MAKEFLAGS="-j 4". Para futuras investigaciones , aconsejo leer antes de escribir . PD: <número de núcleos> + 2 me ha servido bien durante casi dos décadas. En el pasado, Linus hizo una final make -j128antes de lanzar un núcleo.
alias make="make -j4"para eliminar la necesidad de agregar-jNargumentos, pero aún no he pensado en todas las posibles consecuencias ...