2015-06-17 11 views
11

Wenn ich Apache Mesos auf Ubuntu12.04 deploye, folge ich dem offiziellen Dokument, in Schritt "make -j 8" bekomme ich diesen Fehler in der Konsole:make -j 8 g ++: interner Compiler Fehler: Killed (Programm cc1plus)

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 tun?

+2

Herzlichen Glückwunsch, Sie einen Fehler in Ihrem Compiler gefunden. Überlegen Sie, ob Sie einen Fehlerbericht senden möchten ... – nneonneo

+1

@nneoneo, Wahr genug. Als er fragte: "Was soll ich tun?", Glaube ich, meinte er: "... damit es funktioniert?" Ich würde vorschlagen, "make -j 8 VERBOSE = 1" auszuführen, nur um zu sehen, ob irgendetwas in der g ++ - Befehlszeile nicht so aussieht, wie Sie es erwarten. Wenn Sie Glück haben, finden Sie einen Hinweis auf Ihren nächsten Schritt. – donjuedo

+1

Lassen Sie auch die '" -j 8 "' fallen.Das führt einfach dazu, dass "make" den Build parallelisiert, was nichts klarer macht. –

Antwort

26

Versuchen Sie zu laufen (kurz nach dem Fehler) dmesg.

Sehen Sie eine Zeile wie diese?

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 

Wahrscheinlich ist das Ihr Problem. Das Ausführen von make -j 8 führt viele Prozesse aus, die mehr Speicher benötigen. Das obige Problem tritt auf, wenn Ihr System über genügend Arbeitsspeicher verfügt. In diesem Fall führt das Betriebssystem statt des gesamten Systems einen Prozess durch, um jeden Prozess auf dem System zu bewerten. Derjenige, der den höchsten Wert erzielt, wird vom Betriebssystem getötet, um Speicher freizugeben. Wenn der Prozess, der beendet wird, cc1plus ist, interpretiert gcc (möglicherweise falsch) dies als den Absturz des Prozesses und nimmt daher an, dass es sich um einen Compiler-Fehler handeln muss. Aber es ist nicht wirklich, das Problem ist, dass das Betriebssystem cc1plus getötet, anstatt es abgestürzt ist.

Wenn dies der Fall ist, haben Sie nicht mehr genügend Arbeitsspeicher. Also mach vielleicht -j 4 statt. Dies bedeutet weniger parallele Jobs und bedeutet, dass die Kompilierung länger dauert, aber Ihren Systemspeicher hoffentlich nicht erschöpft.

0

Dies war der Schlüssel in meinem Szenario (Mesos auf CentOS 7 kompilieren) auf einer AWS EC2-Instanz.

Ich reparierte es, indem ich Gedächtnis und CPU zu mindestens 4GiB und 2 vCPUs erhöhte.

0

(Könnte ein Speicherproblem sein)

Für alle noch mit diesem zu kämpfen (mehr als 2 Jahre, nachdem die Frage gestellt wurde), gibt es this trick auf CryptoCurrencyTalk, dass es Arbeit zu bilden scheint.

Zur Vereinfachung Ich bin Einfügen es hier:

Run diese

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

, dass Sie Ihren Code kompilieren lassen sollten. Aber stellen Sie sicher, dann die swapon nach der Kompilierung zurückkehren, mit diesen:

  • sudo swapoff /swapfile
  • sudo rm /swapfile