make -j 8 g++: внутренняя ошибка компилятора: Killed (программа cc1plus)

Когда я развертываю Apache Mesos в Ubuntu12.04, я следую официальному документу, на шаге "make -j 8" я получаю эту ошибку в консоли:

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

что я должен делать?

3 ответа

Попробуйте запустить (сразу после сбоя) dmesg.

Вы видите такую ​​линию?

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

Скорее всего, это ваша проблема. Запуск make -j 8 запускает много процессов, которые используют больше памяти. Проблема выше возникает, когда вашей системе не хватает памяти. В этом случае, вместо падения всей системы, операционные системы запускают процесс для оценки каждого процесса в системе. Тот, кто набирает наибольшее количество очков, убивается операционной системой, чтобы освободить память. Если убитый процесс - это cc1plus, gcc (возможно, неправильно) интерпретирует это как сбой процесса и, следовательно, предполагает, что это должна быть ошибка компилятора. Но это не совсем так, проблема в том, что ОС убила cc1plus, а не она рухнула.

Если это так, вам не хватает памяти. Поэтому, возможно, запустите make -j 4. Это будет означать меньше параллельных заданий и будет означать, что компиляция займет больше времени, но, надеюсь, не исчерпает вашу системную память.

(Может быть проблема с памятью)

Для тех, кто все еще борется с этим (более 2 лет после того, как был задан вопрос), есть такой прием в CryptoCurrencyTalk, который, кажется, заставляет его работать.

Для удобства я вставляю это здесь:

Запустить эти

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

Это должно позволить вам скомпилировать ваш код. Но убедитесь, что вы вернули swapon после компиляции, с этими:

  • sudo swapoff /swapfile
  • sudo rm /swapfile

Проверьте , что в вашей установке CentOS уже включен swap, набрав:

sudo swapon --show

Если вывод пуст, это означает, что в вашей системе не включено пространство подкачки.

Создать файл подкачки

1. создайте файл, который будет использоваться в качестве пространства подкачки. Счетчик означает 1024M * 1024 = 1G

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

2. Убедитесь, что только пользователь root может читать и записывать файл подкачки:

sudo chmod 600 /swapfile

3. установить область подкачки Linux на файл

sudo mkswap /swapfile

4. активировать своп

sudo swapon /swapfile

5."sudo swapon --show" или "sudo free -h" вы увидите пространство подкачки.

Это было ключом к моему сценарию (сборка мезо в CentOS 7) для экземпляра AWS EC2.

Я исправил это, увеличив память и процессор как минимум до 4 ГБ и 2 виртуальных ЦП.

Другие вопросы по тегам