Last Updated on 2021-08-31 by Clay
WSL(Windows subsystem for Linux)是在 Windows 作業系統上的 Linux 子系統,對於習慣使用 Windows 當作日常使用裝置、但有時又想使用 Linux 上方便的指令、套件的人來說,是再方便不過的一套系統。
而 WSL 2 即將於今年十一月發布並加入 Windows 正式版,但目前已經可於開發者計畫中升級 Windows 版本,並提早嘗鮮使用 XDD
WSL 和 WSL 2 的差異,按照官方的宣告應如下:
功能 | WSL 1 | WSL2 |
---|---|---|
Windows 和 Linux 之間的整合 | O | O |
快速開機時間 | O | O |
低資源使用量 | O | O |
以最新版的 VMware 和 VirtualBox 執行 | O | O |
受控 VM | X | O |
完整的 Linux 核心 | X | O |
完整的系統呼叫相容性 | X | O |
OS 檔案系統之間的效能 | O | X |
其中最驚嘆的就是完整的 Linux 核心和系統呼叫相容性了!記得當初使用 WSL 的時候,的確會有一些指令、環境是沒辦法在 WSL 中跑起來的,現在看起來,恐怕當初的問題都已經不復存在了。
當然,WSL 2 並不是完全海放 WSL,跨系統之間的效能是比較差的(?)不過我並不是很確定官方這個宣稱的意思 —— 是移動檔案比較慢嗎?
話題扯遠了。最重要的是,今天在 WSL 2 的環境中跑程式,突然間記憶體爆掉了(Out of Memory, OOM),用 htop
指令一看,發覺記憶體竟然只有 7.77 GB。
這是很奇怪的問題,因為我的裝置上應該有 128 GB 的記憶體才對。
寫設定檔分配記憶體
事先說明,以下的解決方法我只有在 WSL 2 中測試過是 OK 的,WSL 我就不確定了。
首先,關閉所有開啟的 WSL 2,並打開 CMD,輸入以下指令:
wsl --shutdown
緊接著,我們可以透過寫設定檔解決此一問題。
將以下設定放在 C:\Users\<your_user_name>\.wslconfig 中。記得檢查不要在最後添加副檔名 .txt。
.wslconfig 中的設定如下:
[wsl2]
memory=120GB # Limits VM memory in WSL 2 to 128 GB
儲存關閉,重新啟動 WSL 2,可以使用 htop
指令檢查,應該就會反映出 120 GB 的記憶體了。
請問如何重新啟動WSL 2
由於沒有直接的 restart 指令,所以你可以會需要使用『管理員權限』啟動 Windows PowerShell,然後輸入 `wsl –shutdown`,過一段時間後,再次使用 `wsl` 重新啟動。