Plus tôt aujourd'hui lors de la construction de quelque chose, j'ai décidé de courir make
comme
$ make -j
peut - être par habitude avec d' autres programmes tels que cabal
lorsque les -j
valeurs par défaut à une limite raisonnable.
Environ 20 secondes plus tard, l' ensemble de mon bureau s'arrête . Je recherche divers signes d'activité. Aucun fan ne tourne. Le voyant du disque dur est vert fixe, mais je n'entends aucune activité de disque. Hmmmmm. Après 10 minutes de silence, je vois enfin une réponse à la première pression sur une touche que j'ai faite il y a très longtemps, et je commence également à entendre le son trop familier du battement de disque. 20 minutes plus tard, essayant lentement de me frayer un chemin dans un terminal de cette machine qui ne répondait pas, j'ai cédé et utilisé REISUB.
Au début, je pensais qu'une application de bureau non liée devait être le coupable, car j'avais depuis longtemps des limites de mémoire placées sur les sessions de bash interactives pour m'empêcher de me mettre exactement dans ce genre de situation! Mais /var/log/syslog
raconte une histoire différente; le tueur OOM laissé derrière quelques ps
décharges qui sont soupçonneux emballés avec c++
et cc1plus
processus!
Voici une analyse de fréquence de l'un de ces vidages:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Je vérifie donc la page de manuel de GNU make: (non souligné dans l'original)
-j [jobs], --jobs [= jobs] Spécifie le nombre de jobs (commandes) à exécuter simultanément. S'il y a plus d'une option -j, la dernière est effective. Si l'option -j est donnée sans argument, make ne limitera pas le nombre de travaux pouvant s'exécuter simultanément.
Je suis réticent à voir si je peux reproduire le problème (docteur, ça fait mal quand je fais ça ...) , mais les résultats de l'enquête semblent jusqu'à présent être un home run: clairement, make -j
et les centaines de processus résultants doivent avoir été la cause du blocage et du débordement de disque. Cela dit, en cherchant sur Internet, je ne trouve pas beaucoup d'avertissement contre cela. Suis-je en train de sauter aux conclusions?
Est-ce make -j
aussi dangereux qu'il me semble? Si oui, pourquoi diable est-il là, et que peut-on faire pour le protéger des idiots?
make
les propres installations de et faites export MAKEFLAGS="-j 4"
. Pour de plus amples investigations, je conseille de lire avant de taper . PS: <nombre de cœurs> + 2 me sert bien depuis près de deux décennies maintenant. À l'époque, Linus a fait une finale make -j128
avant de sortir un noyau.
alias make="make -j4"
pour éliminer la nécessité d'ajouter des-jN
arguments, mais je n'ai toujours pas réfléchi à toutes les conséquences possibles ...