Требования к сборке Deno, похоже, 16 ГБ ОЗУ, но я хочу собрать его с 8 ГБ ОЗУ, несмотря ни на что

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, я бездарь.
Когда я попытался немного повозиться и собрать его сам,

error: linking with `cc` failed: exit status: 1

появилась эта ошибка, и компиляция не прошла.
По логике, это ошибка, которая возникает, когда компоновщик что-то делает, но я не смог найти никакой информации при поиске.

Ответ в syslog

Итак, я подключался по SSH к своей машине Devuan на домашнем сервере и пытался собрать, но и это не сработало.
И тут я случайно вывел экран машины Devuan на монитор, и вывод ошибки почему-то... OOM Killer?

$ sudo cat /var/log/syslog | grep "Out of memory" 
Oct 13 11:50:16 localhost kernel: [227399.170721] Out of memory: Killed process 8309 (ld) total-vm:2711000kB, anon-rss:2682476kB, file-rss:1608kB, shmem-rss:0kB, UID:1000 pgtables:5352kB oom_score_adj:0
Oct 13 12:38:52 localhost kernel: [230315.610776] Out of memory: Killed process 9472 (ld) total-vm:2883664kB, anon-rss:2872404kB, file-rss:1468kB, shmem-rss:0kB, UID:1000 pgtables:5704kB oom_score_adj:0
Oct 13 16:34:15 localhost kernel: [244437.896036] Out of memory: Killed process 9979 (ld) total-vm:2195452kB, anon-rss:2187944kB, file-rss:1604kB, shmem-rss:0kB, UID:1000 pgtables:4348kB oom_score_adj:0

$ date
2024年 10月 13日 日曜日 16:48:12 JST

Похоже, не хватает памяти, и процесс, запущенный для компиляции, был убит, поэтому она не проходит.
Я уже создал issue,
cargo test -vv faild on Arch/Artix Linux #26191
Хотя это не было указано в требованиях для сборки из официального исходника, похоже, минимальное требование для сборки — 16 ГБ ОЗУ...

Я попробовал собрать на своем самодельном ПК с почти 40 ГБ ОЗУ, и это сработало...

Во что бы то ни стало, я хочу скомпилировать Deno в среде с 8 ГБ ОЗУ!!

В конце концов, если вы просто хотите получить бинарник deno, как мне подсказали в issue,

cargo build -p deno --bin deno

этого, похоже, достаточно, но даже так часто не проходит.
Поэтому я искал способы уменьшить использование памяти...

CARGO_BUILD_JOBS=1 cargo build -p deno --bin deno -j 1

Вероятно, это медленно, но если вы сначала соберете обычным способом, а затем используете вышеуказанный метод после срабатывания OOM Killer, он будет использовать кэш для сборки, и это закончится относительно быстро.
Поскольку количество задач сборки ограничено одной, и используется один поток ЦП для компиляции, это оказывает меньшее влияние на другие запущенные процессы во время компиляции, поэтому я думаю, что это довольно хорошая переменная окружения/опция, хотя и медленная...

До скорого.
С наилучшими пожеланиями.

Related Posts