简略回覆:

在Windows%userprofile%目录(一般是C:Users)中,使用以下内容创建或编辑文件.wslconfig:

代码语言:javascript

复制

[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"

之后退出任何WSL实例,wsl--shutdown,并重新启动。

代码语言:javascript

复制

> sysctl vm.max_map_count
vm.max_map_count = 262144

更详尽的情况:

docker sysctl_docker sysctl_docker sysctl

你真的有三个(密切相关的)问题:

我们将把前三者结合上去,由于答案是“是的docker sysctl,您可以通过.wslconfig来完成。

这并不容易找到,由于变化是近来发生的。它来了礼貌的这个答案。

从内核版本5.8开始,可以在内核命令行上将sysctl值设置为sysctl.*前缀。

为此,只要您升级了WSL内核(自从wsl--update近来在21H1发布以来,我还没有在两个系统上使用它),您就可以像前面这样设置您的%userprofile%.wslconfig。

/etc/sysctl.conf

/etc/sysctl.conf将此值设置为永久值,虽然其在重新启动时存活出来.为何不呢?

这一节有好多比真正须要的更多,由于我先走了这条小狗的小径linux社区,把它作为最初的答案。但首先“为什么”不起作用..。

这是一个带有已知问题的WSL2。

尽管sysctl和Systemd/systemctl是两个完全不同的东西,但在这个问题上(Microsoft团队的)强调,必须读取和处理/etc/sysctl.conf。在大多数Linux发行版中,这是Systemd或SysVInit脚本。

另一方面,WSL使用它自己的/init来取代SysVInit或Systemd。WSL进程(目前)没有在启动时运行服务的机制,正如您在openSUSE文档中所发觉的那样。所以..。在启动时,/etc/sysctl.conf上没有任何读取和操作。

这个答案的其余部发包括一些不须要的systcl.conf解决方案,由于我们可以使用.wslconfig__来完成这种工作。这是留待万一有人发觉它有用的诱因。

docker sysctl_docker sysctl_docker sysctl

这有几个解决办法。所有那些都涉及到找到一种手动运行sysctl-wvm.max_map_count=262144(作为root用户)的方式:

对于我们中的许多人来说linux多线程编程,在未来一段时间内,她们将在Windows10上工作docker sysctl,有几种选择。不幸的是,我还没有才能在Docker上测试这种实例,而且我在过去使用过类似的技术来处理其他WSL实例:

代码语言:javascript

复制

- "Basic Task"
- With the "Program" set to `wsl.exe`
- And the Arguments set to `-d docker-desktop sh -c "sysctl -w vm.max_map_count=262144"`

请注意,假若停靠桌面WSL实例在任何点中止,则修改将遗失直至上次重新启动。并且,因为Desktop是在启动/登陆时运行的,因而实例应当与此修改保持一致。

最后一个建议--向码头桌面小组递交一个功能恳求。IMHO觉得,对于Desktop的启动过程来说,读取/etc/sysctl.conf并相应地处理它是最容易的。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复