it-swarm.com.de

make -j 8 g ++: interner Compiler-Fehler: Getötet (Programm cc1plus)

Wenn ich Apache Mesos auf Ubuntu12.04 bereitstelle, folge ich dem offiziellen Dokument. In Schritt "make -j 8" erhalte ich diese Fehlermeldung in der Konsole:

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
make[2]: *** [slave/containerizer/mesos/libmesos_no_3rdparty_la-containerizer.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
mv -f log/.deps/liblog_la-log.Tpo log/.deps/liblog_la-log.Plo
mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Plo
mv -f log/.deps/liblog_la-consensus.Tpo log/.deps/liblog_la-consensus.Plo

mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Plo
mv -f log/.deps/liblog_la-coordinator.Tpo log/.deps/liblog_la-coordinator.Plo
mv -f slave/.deps/libmesos_no_3rdparty_la-slave.Tpo slave/.deps/libmesos_no_3rdparty_la-slave.Plo
mv -f master/.deps/libmesos_no_3rdparty_la-master.Tpo master/.deps/libmesos_no_3rdparty_la-master.Plo
make[2]: Leaving directory `/root/Mesos/mesos/build/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/Mesos/mesos/build/src'
make: *** [all-recursive] Error 1

was soll ich machen?

17
pugna

Versuchen Sie, dmesg (kurz nach dem Fehler) auszuführen. 

Sehen Sie eine solche Linie? 

Out of memory: Kill process 23747 (cc1plus) score 15 or sacrifice child
Killed process 23747, UID 2243, (cc1plus) total-vm:214456kB, anon-rss:178936kB, file-rss:5908kB

Am wahrscheinlichsten ist das dein Problem. Das Ausführen von make -j 8 führt viele Prozesse aus, die mehr Speicher benötigen. Das obige Problem tritt auf, wenn der Speicher Ihres Systems nicht ausreicht. In diesem Fall führt das Betriebssystem nicht das gesamte System um, sondern führt einen Prozess aus, um jeden Prozess im System zu bewerten. Derjenige, der den höchsten Wert erzielt, wird vom Betriebssystem getötet, um Speicherplatz freizugeben. Wenn der Prozess, der beendet wird, cc1plus ist, interpretiert gcc (möglicherweise falsch) diesen Prozess als Absturz und nimmt daher an, dass es sich um einen Compiler-Fehler handeln muss. Aber es ist nicht wirklich das Problem, dass das Betriebssystem cc1plus getötet hat und nicht abgestürzt ist. 

Wenn dies der Fall ist, ist der Speicher knapp. Also vielleicht stattdessen make -j 4 ausführen. Dies bedeutet weniger parallele Aufträge und bedeutet, dass die Kompilierung länger dauert, der Systemspeicher jedoch hoffentlich nicht erschöpft wird. 

39
Jon Combe

(Möglicherweise ein Gedächtnisproblem)

Für alle, die immer noch Probleme haben (über 2 Jahre nachdem die Frage gestellt wurde), gibt es diesen Trick auf CryptoCurrencyTalk, der scheint, dass es funktioniert.

Der Einfachheit halber füge ich es hier ein:

Führen Sie diese aus

  • Sudo dd if=/dev/zero of=/swapfile bs=64M count=16
  • Sudo mkswap /swapfile
  • Sudo swapon /swapfile

Damit sollten Sie Ihren Code kompilieren können. Aber stellen Sie sicher, dass Sie die swapon nach der Kompilierung mit diesen zurücksetzen:

  • Sudo swapoff /swapfile
  • Sudo rm /swapfile
7
ribbit

Dies war der Hinweis in meinem Szenario (Erstellen von Mesos unter CentOS 7) auf einer AWS EC2-Instanz.

Ich habe es behoben, indem Speicher und CPU auf mindestens 4 GB und 2 vCPUs erhöht wurden.

1
Traiano Welcome

prüfen Sie, ob in Ihrer CentOS-Installation bereits Swap aktiviert ist, indem Sie Folgendes eingeben:

Sudo swapon --show

Wenn die Ausgabe leer ist, bedeutet dies, dass Ihr System den Swap-Speicher nicht aktiviert hat.

Erstellen Sie eine Auslagerungsdatei

1.Erstellen Sie eine Datei, die als Auslagerungsbereich verwendet wird. Zählmittel bedeuten 1024M * 1024 = 1G

Sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

2.Stellen Sie sicher, dass nur der Root-Benutzer die Auslagerungsdatei lesen und schreiben kann:

Sudo chmod 600 /swapfile

3. Richten Sie einen Linux-Swap-Bereich für die Datei ein

Sudo mkswap /swapfile

4. Aktivieren Sie den Swap

Sudo swapon /swapfile

5. "Sudo swapon --show" oder "Sudo free -h" sehen Sie den Swap Space.

0
Li Yingjun