Lorsque je déploie Apache Mesos sur Ubuntu12.04, je suis le document officiel. À l'étape "make -j 8", cette erreur s'affiche dans la console:
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
que devrais-je faire?
Essayez de lancer (juste après l'échec) dmesg.
Voyez-vous une ligne comme ça?
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
Très probablement, c'est votre problème. Lancement de make -j 8 exécute de nombreux processus qui utilisent plus de mémoire. Le problème ci-dessus se produit lorsque votre système manque de mémoire. Dans ce cas, plutôt que le système tout entier tombe en panne, les systèmes d'exploitation exécutent un processus pour évaluer chaque processus sur le système. Celui qui obtient le score le plus élevé est tué par le système d'exploitation pour libérer de la mémoire. Si le processus tué est cc1plus, gcc (peut-être de manière incorrecte) l'interprète comme un processus en panne et suppose donc qu'il s'agit d'un bogue du compilateur. Mais ce n’est pas vraiment le problème, c’est le système d’exploitation tué cc1plus, plutôt qu’il s’est écrasé.
Si tel est le cas, vous manquez de mémoire. Alors lancez peut-être -j 4 à la place. Cela signifiera moins de travaux parallèles et signifiera que la compilation prendra plus de temps mais n'espère pas épuiser la mémoire de votre système.
(Pourrait être un problème de mémoire)}
Pour ceux qui ont encore du mal à le faire (plus de 2 ans après que la question a été posée), il y a cette astuce sur CryptoCurrencyTalk qui semble le faire fonctionner.
Pour plus de commodité, je le colle ici:
Exécuter ces
Sudo dd if=/dev/zero of=/swapfile bs=64M count=16
Sudo mkswap /swapfile
Sudo swapon /swapfile
Cela devrait vous permettre de compiler votre code. Mais assurez-vous de rétablir la swapon
après la compilation, avec ceux-ci:
Sudo swapoff /swapfile
Sudo rm /swapfile
C'était la clé de mon scénario (compilation de mesos sur CentOS 7) sur une instance AWS EC2.
Je l'ai corrigé en augmentant la mémoire et l'unité centrale à au moins 4 Go et 2 vCPU.
vérifiez si le swap est déjà activé sur votre installation Centos en tapant:
Sudo swapon --show
Si la sortie est vide, cela signifie que l’espace de permutation n’est pas activé sur votre système.
Créer un fichier d'échange
1.créer un fichier qui sera utilisé comme espace de swap. compter signifie 1024M * 1024 = 1G
Sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
2.Assurez-vous que seul l'utilisateur root peut lire et écrire le fichier d'échange:
Sudo chmod 600 /swapfile
3. Configurez une zone de swap Linux sur le fichier
Sudo mkswap /swapfile
4.activer l'échange
Sudo swapon /swapfile
5. "Sudo swapon --show" ou "Sudo free -h", vous verrez l'espace de swap.