Deno的构建要求是16GB RAM,但我决心用8GB RAM来构建
大家好,我是无能。
当我尝试自己修改并构建时
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
看来是内存不足,导致编译过程中启动的进程被Kill掉,所以无法通过。
虽然我已经提交了一个issue
cargo test -vv faild on Arch/Artix Linux #26191
虽然官方源代码的构建要求中没有写明,但构建的最低要求似乎是16GB RAM……
我尝试在我那台装有近40GB RAM的自组PC上构建,结果成功了……
无论如何都想在8GB RAM环境下编译Deno!!
最终,如果只是想让deno的二进制文件通过,就像在issue中告诉我的那样
cargo build -p deno --bin deno
似乎这样就可以了,但即使这样也经常无法通过。
于是,我开始摸索减少内存使用量的方法……
CARGO_BUILD_JOBS=1 cargo build -p deno --bin deno -j 1
虽然可能很慢,但如果先进行一次普通构建,在OOM Killer发生后,再使用上述命令,它会利用缓存进行构建,所以会相对快地完成。
将构建本身的作业限制为1个,并且在编译时只使用CPU的一个线程,这样在编译的同时对其他正在运行的程序影响较小,我觉得这是一个相当不错的环境变量/选项设置。虽然这样会慢一些……
那么,下次再见。
请多关照。