Os requisitos de build do Deno são de 16GB de RAM, mas quero construí-lo com 8GB de RAM à força

4 min

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

Olá, sou um inútil.
Quando tentei mexer e construir por conta própria, apareceu isso:

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

e a compilação não passou.
Normalmente, parece ser um erro que ocorre quando o linker está fazendo algo, mas não encontrei nada ao pesquisar.

A resposta está no syslog

Bem, eu estava conectado via SSH à minha máquina Devuan de servidor doméstico e tentando construir, mas isso também não funcionou.
E por acaso, eu estava com a tela da máquina Devuan conectada a um monitor, e a saída de erro era, por algum motivo... 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

Parece que a memória é insuficiente e o processo iniciado para a compilação é encerrado, impedindo que ela seja concluída.
Eu já havia aberto uma issue, mas
cargo test -vv faild on Arch/Artix Linux #26191
Embora não estivesse escrito nos requisitos para construir a partir do código-fonte oficial, parece que o requisito mínimo para a construção é de 16GB de RAM...

Tentei construir em um PC que montei com quase 40GB de RAM e funcionou...

Quero compilar o Deno em um ambiente com 8GB de RAM, não importa como!!

No final, se você quiser apenas que o binário deno seja compilado, como me disseram nas issues, basta usar:

cargo build -p deno --bin deno

parece que isso é suficiente, mas mesmo assim, muitas vezes não funciona.
Então, procurei maneiras de reduzir o uso de memória...

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

Provavelmente é lento, mas se você tentar construir normalmente uma vez e, depois que o OOM Killer ocorrer, usar o comando acima, ele usará o cache para construir, terminando relativamente mais rápido.
O trabalho de build em si é limitado a um, e um thread da CPU é usado para a compilação, então o impacto em outras coisas em execução enquanto compila é mínimo. Acho que é uma boa variável de ambiente/opção, mesmo que seja um pouco simples. É mais lento, mas...

Até a próxima.
Por favor, cuidem-se.

Related Posts