如何提高 WSL2 上 Ubuntu 20.04 中打开文件的限制?

Posted

技术标签:

【中文标题】如何提高 WSL2 上 Ubuntu 20.04 中打开文件的限制?【英文标题】:How can I raise the limit for open files in Ubuntu 20.04 on WSL2? 【发布时间】:2021-01-05 16:39:49 【问题描述】:

我的设置如下所示:Windows 10,Release 1909(内部版本 18363.1082),在 Ubuntu 20.04 环境中使用 WSL2。大多数时候一切都很好,但有些问题我无法解决。

在使用parcel (React bundler) 开发过程中,我遇到了 bundler 显然同时打开 lots 文件的问题,并且在某个时刻,我遇到了以下问题问题:

EMFILE: too many open files, open '/home/myusername/Projects/some-project-path/node_modules/@material-ui/icons/esm/RoundedCornerRounded.js'

由于parcel 似乎不容易支持使用graceful-fs 之类的东西,我试图增加在 Ubuntu 环境中打开文件的限制。到目前为止我尝试过的:

一个简单的ulimit -n 4096(默认情况下可能最高),但显然(到目前为止?)还不够 我尝试将fs.files-max 增加到/etc/sysctl.conf 中的某个非常高的值,但它似乎没有效果(sysctl -p 之后和wsl 重新启动之后都没有) 我也尝试增加fs.inotify.max_user_watches,但这似乎也没有效果 在/etc/security/limits.conf 中设置软限制和硬限制似乎没有效果 我还发现在 /etc/systemd/system.conf 中更改 DefaultLimitNOFILE 会产生影响(所以我也这样做了)

有没有人设法在 WSL2 上解决 Ubuntu 20.04 上的类似系统?这让我很困惑,它阻止我在这个环境中使用parcel。真可惜,因为其他一切都运行良好。


更新

所以我发现我在各个地方的更改(可能是/etc/security/limits.conf中的那个)已经产生了某种效果。只是直接登录时没有。这说明了这一点:

donmartin@SOMEMACHINE:~$ ulimit -Hn
4096
donmartin@SOMEMACHINE:~$ su donmartin
Password:
donmartin@SOMEMACHINE:~$ ulimit -Hn
65536
donmartin@SOMEMACHINE:~$

这意味着:如果我 su 对我自己的用户,ulimit 确实已经提出。但是,如果我使用 Windows 终端正常登录,则此限制有效。现在更加困惑 - 但是 - 我有一个解决我的问题的方法。将我的值设置为65536 后,parcel 构建现在可以工作,以我自己的用户身份运行。去搞清楚!我仍然不太清楚现在哪个设置正在改变行为 - 也许有人对它的工作原理和/或我如何将其设为默认设置有更全面的信息,而无需执行 su 以获得更新的限制。

【问题讨论】:

【参考方案1】:

试试这个:

$ visudo
ADD: user ALL=(ALL) NOPASSWD:ALL
$ vi ~/.profile
ADD: user ALL=(ALL) NOPASSWD:ALL
$ vi /etc/security/limits.conf
ADD: user soft nproc 10000
user hard nproc 10000
user soft nofile 10000
user hard nofile 10000

【讨论】:

【参考方案2】:

我必须将以下行添加到/etc/systemd/user.conf

DefaultLimitNOFILE=65535

正如这里的答案所写:

https://superuser.com/questions/1200539/cannot-increase-open-file-limit-past-4096-ubuntu/1200818#1200818?s=1b927bb17396480da98a94cbacf8da62

【讨论】:

你能确认你在 WSL 上吗?最初的问题是关于 Linux 的 Windows 子系统,它不支持 systemd,所以如果编辑 systemd 配置文件会对这个问题产生任何影响,那将是令人惊讶的。也许我错过了一些东西;或者你是? 这是在 WSL2 上。我在使用 WSL2 和 Ubuntu 20.04 的打开文件数量方面遇到了完全相同的问题。首先,我尝试了limits.conf 以及我习惯于其他Linux 发行版的内容,然后我偶然发现了链接的答案,它为我解决了这个问题。 酷 - 正如我所说,我很惊讶,但感谢您的确认!

以上是关于如何提高 WSL2 上 Ubuntu 20.04 中打开文件的限制?的主要内容,如果未能解决你的问题,请参考以下文章

Windows10/Windows11 子系统(WSL2)安装Ubuntu20.04

超详细Windows10/Windows11 子系统(WSL2)安装Ubuntu20.04(带桌面环境)

如何在 Windows 上运行多个 WSL2 实例?

无法在 WSL 2 Ubuntu20.04 上通过 Ansible 启动服务

Windows 10专业版安装 WSL2 (Ubuntu 20.04)

Windows 10专业版安装 WSL2 (Ubuntu 20.04)