Bereits heute Morgen , als etwas zu bauen, entschied ich mich zu laufen make
als
$ make -j
Möglicherweise aus Gewohnheit mit anderen Programmen, z. B. cabal
wenn die -j
Standardeinstellungen auf eine angemessene Grenze festgelegt sind.
Ungefähr 20 Sekunden später kommt mein gesamter Desktop zum Stillstand . Ich suche nach verschiedenen Anzeichen von Aktivität. Keine Fans drehen sich. Die Festplattenanzeige leuchtet durchgehend grün, aber ich höre keine Festplattenaktivität. Hmmmmm. Nach 10 Minuten Stille sehe ich endlich eine Antwort auf den ersten Tastendruck, den ich vor langer Zeit gemacht habe, und ich höre auch das allzu vertraute Geräusch von Disk-Thrashing. 20 Minuten später, als ich langsam versuchte, mich auf dieser nicht reagierenden Maschine in ein Terminal zu waten, gab ich nach und benutzte REISUB.
Zuerst dachte ich, dass eine nicht verwandte Desktop-Anwendung der Schuldige gewesen sein muss, weil ich längst Speicherbeschränkungen für interaktive Bash-Sitzungen festgelegt habe , um zu verhindern, dass ich mich in genau diese Situation versetze! Aber /var/log/syslog
erzählt eine andere Geschichte; die OOM Killer hinter sich gelassen einigen ps
Deponien , die verdächtig sind , verpackt mit c++
und cc1plus
Prozesse!
Hier ist eine Frequenzanalyse eines dieser Dumps:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Also überprüfe ich die Manpage für GNU make: (Hervorhebung hinzugefügt)
-j [Jobs], --jobs [= Jobs] Gibt die Anzahl der Jobs (Befehle) an, die gleichzeitig ausgeführt werden sollen. Wenn es mehr als eine -j-Option gibt, ist die letzte wirksam. Wenn die Option -j ohne Argument angegeben wird, wird durch make die Anzahl der Jobs, die gleichzeitig ausgeführt werden können, nicht begrenzt.
Ich bin nur ungern zu sehen , ob ich das Problem reproduzieren kann (Doktor, es tut weh , wenn ich dies ...) , aber die Ergebnisse der Untersuchung scheinen bisher ein zu Hause weggelaufen zu sein: Klar, make -j
und die Hunderte von resultierenden Prozessen müssen war die Ursache für den Hang und das Disk Thrashing. Trotzdem kann ich beim Durchsuchen des Internets nicht viel Warnung davor finden. Springe ich zu Schlussfolgerungen?
Ist make -j
so gefährlich, wie es mir scheint? Wenn ja, warum um alles in der Welt ist es dort und was kann getan werden, um es idiotensicher zu machen?
make
eigenen Einrichtungen und tun Sie dies export MAKEFLAGS="-j 4"
. Für weitere Untersuchungen empfehle ich das Lesen vor dem Tippen . PS: <Anzahl der Kerne> + 2 hat mir seit fast zwei Jahrzehnten gute Dienste geleistet. Früher hat Linus ein Finale absolviert, bevor er einen Kernel veröffentlicht hat. make -j128
alias make="make -j4"
die zu beseitigen Notwendigkeit für das Hinzufügen von-jN
Argumenten, aber ich habe noch nicht zu Ende gedacht , alle möglichen Folgen ...