永久解決 WSL vm.max_map_count 65530 is too low 的問題

問題

在使用基於 WSL 的 Docker 的時候,啓動 ES 總是會出現 vm.max_map_count 65530 is too low 問題,導致容器無法啓動,網上答案基本就兩種,例如 stackoverflow 這個鏈接給出的答案是:

$ wsl -d docker-desktop
$ sysctl -w vm.max_map_count=262144

值得注意的是,以上修改只在當前會話有效,重啓 Windows 和 WSL 都要重新設置,後面作者也給出回答:

If you want to set this permanently, you need to edit /etc/sysctl.conf and set vm.max_map_count to 262144.

但是該設置在 WSL 中並不生效,因爲 WSL 並不會讀取 /etc/sysctl.conf 配置文件

解決方案

在嘗試 N 種方案沒有效果後,決定另闢蹊徑,從其他方面考慮,既然每次啓動都要執行 sysctl -w vm.max_map_count=262144 命令,那就想辦法讓它自動執行。通過以下兩種方式可以實現

一:在 WSL2 ubuntu 裏面設置啓動參數,命令如下:

$ vim /etc/init.wsl
#! /bin/sh
sysctl -w vm.max_map_count=262144

然後切回到 Windows 中,創建文件,並且加入以下內容:

Set ws = WScript.CreateObject("WScript.Shell")        
ws.run "wsl -d Ubuntu-20.04 -u root /etc/init.wsl"

以上的 Ubuntu-20.04 可以改爲你的 WSL Linux 發行版名稱,你可以通過 wsl --list 查看

然後將文件通過 *.vbs 格式保存,例如我的是 WSL-linux-start.vbs 文件,然後按 "Win + R" 輸入 shell:startup 打開啓動目錄,將 *.vbs 放入即可,如下:

image-20220616212735536

驗證

通過以上設置,在重啓電腦後,打開 WSL 輸入命令,可以看到分配的虛擬內存爲 262144:

$ sysctl vm.max_map_count
vm.max_map_count = 262144

這樣就解決了每次啓動都需要重複輸入命令的問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章