永久解决 WSL vm.max_map_count 65530 is too low 的问题
2022-06-16 21:31
4467 查看
问题
在使用基于 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.confand setvm.max_map_countto 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
这样就解决了每次启动都需要重复输入命令的问题了
相关文章推荐
- 【Java面试】TCP协议为什么要设计三次握手?
- 设计模式 - 创建型模式 - 单例模式(C++)
- 如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度
- js中数组reduce的使用原来这么简单
- [pwn基础]静态链接原理
- 李呈祥:bilibili在湖仓一体查询加速上的实践与探索
- TypeScript(2)WebStorm自动编译TypeScript配置
- 中国SaaS的困境与机会
- 让 “商业、传播、创意”之间没有鸿沟
- TypeScript(1)介绍与安装
- 软件项目管理 7.4.1.进度计划编排-超前与滞后方法
- 【Java面试】Mysql为什么使用B+Tree作为索引结构
- 蒋鸿翔:网易数据基础平台建设
- Caller 服务调用 - Dapr
- Mob研究院:2020年休闲零食行业研究报告
- 香港交易所与MSCI签订授权协议推出MSCI亚洲及新兴市场期货及期权
- 艾瑞咨询:2020年中国直播电商生态研究报告
- 王者并发课-星耀3:自在不羁-领会非阻塞的同步机制和算法
- 王者并发课-星耀2:穷理尽妙-解构同步器设计原理与AQS浅析
- 王者并发课-星耀1:群雄逐鹿-从鹿死谁手深入理解Java内存模型