您的位置:首页 > 其它

永久解决 WSL vm.max_map_count 65530 is too low 的问题

2022-06-16 21:31 2011 查看 https://www.cnblogs.com/xiao2s

问题

在使用基于 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
放入即可,如下:

验证

通过以上设置,在重启电脑后,打开 WSL 输入命令,可以看到分配的虚拟内存为 262144:

$ sysctl vm.max_map_count
vm.max_map_count = 262144

这样就解决了每次启动都需要重复输入命令的问题了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: