Denoのビルド要件がRAM16GiBらしいけど気合でRAM8GiBでビルドしたい

2 min read

こんにちは、無能です。
ちょっと自分でイジってビルドしていこうとしたら

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

と出てコンパイルが通らない。
普通に考えて、リンカーがごにょごにょやっているときに出るエラーらしいんだが検索しても全然出てこない。

答えはsyslogに

とまあ、自宅サーバーのDevuan機にSSHで接続してビルドしていたんだがこれも駄目。
そんでたまたまDevuan機の画面をモニターに出力していたもんで、エラー出力がなぜか・・・OOM Kiiler?

$ 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

どうやらメモリ足りなくてコンパイルで起動しているプロセスがKillされて通らないっぽい。
すでにissuesを立てちゃっていたんだけど
cargo test -vv faild on Arch/Artix Linux #26191
公式のソースからビルドする場合の要件とかに書いていなかったが、ビルドの最低要件がRAM16GiBらしい・・・。

試しにRAM40GiB近く積んでいる自作PCでビルドしたら通った・・・。

どうやってもDenoをRAM 8GiB環境下でコンパイルしたい!!

結局、denoのバイナリだけとりあえず通したいのであればissuesで教えてもらったとおり

cargo build -p deno --bin deno

で良いっぽいが結構これでも通らない。
そこで、メモリ使用量を抑える方法を模索し・・・

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

多分遅いけど一度普通にビルドしてって、OOM Killer発生したあとに↑でやればキャッシュを利用してビルドしてくれるから比較的に早く終わる。
ビルド自体のジョブは1つに制限し、利用するCPUのコンパイル時のスレッドは1つ使う、としているのでコンパイルしながらも他起動しているものへ影響は少ないので結構良い環境変数/オプション指定だなーと小並ながらに思っています。その分、遅いけど・・・。

それではまた。
よろしくおねがいします。