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

don*_*tin 14 ulimit windows-subsystem-for-linux parceljs wsl-2

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

在使用parcel(React bundler) 进行开发期间,我遇到了 bundler 显然同时打开大量文件的问题,并且在某个时候,我遇到了以下问题:

EMFILE: too many open files, open '/home/myusername/Projects/some-project-path/node_modules/@material-ui/icons/esm/RoundedCornerRounded.js'
Run Code Online (Sandbox Code Playgroud)

由于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似乎没有效果
  • 我还发现,信息变更DefaultLimitNOFILE/etc/systemd/system.conf可以有效果(所以我这样做,以及)

有没有人设法在 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:~$
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*sen 6

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

DefaultLimitNOFILE=65535
Run Code Online (Sandbox Code Playgroud)

正如这里的答案所写:

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

此外,您可能需要运行此命令(如果使用监视许多文件/文件夹中的更改的应用程序):

sudo sh -c 'sysctl fs.inotify.max_user_watches=524288 && sysctl -p'

  • 您能确认您已加入 WSL 吗?最初的问题是关于 Linux 的 Windows 子系统,它不支持“systemd”,因此如果编辑“systemd”配置文件会对这个问题产生任何影响,那将是令人惊讶的。也许我错过了一些东西;或者也许你是? (2认同)
  • 酷 - 正如我所说,我很惊讶,但感谢您的确认! (2认同)