Deno 的建置要求似乎是 16GB RAM,但我仍想在 8GB RAM 環境下建置

3 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

看來是記憶體不足,導致編譯時啟動的程序被 Kill,所以無法通過。
雖然我已經開了一個 issue
cargo test -vv faild on Arch/Artix Linux #26191
官方原始碼的建置要求中沒有寫到,但建置的最低要求似乎是 16GB RAM...。

試著在我那裝有近 40GB RAM 的自組電腦上建置,結果成功了...。

無論如何都想在 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 發生後再用上述方法,它會利用快取進行建置,所以會比較快完成。
建置本身的任務被限制為一個,並且編譯時使用的 CPU 執行緒也只用一個,這樣在編譯的同時對其他正在運行的程序影響較小,我認為這是一個相當不錯的環境變數/選項設定。雖然相對地會比較慢...。

那麼,下次再見。
請多指教。

Related Posts