Как скомпилировать ruby ​​с RVM в системе с малым объемом памяти?

rvm install 1.9.3

приводит к ошибке в make.log:

...
compiling ./enc/trans/emoji_sjis_docomo.c
compiling ./enc/trans/emoji_sjis_kddi.c
gcc: internal compiler error: Killed (program cc1)
gcc: internal compiler error: Killed (program cc1)
gcc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
...

dmesg показывает

[180031.341709] send sigkill to 3705 (cc1), adj 0, size 3394

free показывает в какой-то момент запущенный процесс настройки:

             total       used       free     shared    buffers     cached
Mem:        241668     238676       2992          0         92       2020
-/+ buffers/cache:     236564       5104
Swap:       262140     262140          0

Поэтому я предполагаю, что 256 МБ ОЗУ и 256 МБ подкачки недостаточно для компиляции на нем Ruby.

Я читал, что можно использовать некоторые параметры для gcc, см.: http://hostingfu.com/article/compiling-with-gcc-on-low-memory-vps

Но

  rvm install 1.9.3 --with-CFLAGS="$CFLAGS --param ggc-min-expand=0 --param ggc-min-heapsize=8192"

Не работает передача флагов в gcc, лог для флагов все тот же:

command(2): __rvm_make -j4
        CC = gcc
        LD = ld
        LDSHARED = gcc -shared
        CFLAGS = -O3 -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-fiel$
        XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
        CPPFLAGS =   -I. -I.ext/include/x86_64-linux -I./include -I.
        DLDFLAGS = -Wl,-soname,libruby.so.1.9
        SOLIBS = -lpthread -lrt -ldl -lcrypt -lm

Как скомпилировать ruby ​​на этой машине?


person marc    schedule 04.11.2013    source источник
comment
попробуй rvm install 1.9.3 -- CFLAGS="$CFLAGS --param ggc-min-expand=0 --param ggc-min-heapsize=8192"   -  person mpapis    schedule 04.11.2013
comment
[205242.284757] send sigkill to 17549 (cc1), adj 0, size 11726 тоже. Теперь в make.log есть следующие CFLAGS: CFLAGS = --param ggc-min-expand=0 --param ggc-min-heapsize=8192 -fPIC Отсутствуют некоторые флаги, которые показаны изначально/выше. make.log продолжает: ` .. configuring -test-/funcall configuring -test-/load/dot.dot gcc: внутренняя ошибка компилятора: Killed (программа cc1) gcc: внутренняя ошибка компилятора: Killed (программа cc1) Пожалуйста, отправьте полный отчет об ошибке с предварительно обработанным исходным кодом, если это необходимо. .. ` и заканчивается на configuring zlib   -  person marc    schedule 04.11.2013
comment
экспортировали переменную CFLAG, теперь это echo $CFLAGS: CFLAGS = --param ggc-min-expand=0 --param ggc-min-heapsize=8192 -fPIC. rvm reinstall 1.9.3 ведет к make.log CFLAGS = --param ggc-min-expand=0 --param ggc-min-heapsize=8192 -fPIC и тому же выходу из памяти.   -  person marc    schedule 04.11.2013


Ответы (1)


Создание файла подкачки размером 512 МБ решило проблему. Вот шаги:

sudo mkdir -p /var/cache/swap/
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=1M count=512
sudo chmod 0600 /var/cache/swap/swap0
sudo mkswap /var/cache/swap/swap0 
sudo swapon /var/cache/swap/swap0

Файл подкачки не используется после перезагрузки. Его можно интегрировать в /etc/fstab, чтобы использовать после перезапуска:

 /var/cache/swap/swap0    none    swap    sw      0 0

Описанные выше шаги по созданию файла подкачки я нашел здесь (на немецком): http://wiki.ubuntuusers.de/Swap#Swap-als-Datei — лицензия на указанный выше контент: http://creativecommons.org/licenses/by-nc-sa/2.0/de/deed.en (Attribution-NonCommercial-ShareAlike 2.0 Germany (CC BY-NC-SA 2.0 DE))

person marc    schedule 07.11.2013