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

18

我的设置如下:Windows 10,版本1909(构建18363.1082),使用WSL2与Ubuntu 20.04环境。大多数时间一切都很顺利,但是有些问题我无法解决。

在使用parcel(React打包工具)进行开发时,我遇到一个问题,即打包程序明显同时打开了许多文件,并且在某个时候出现以下问题:

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(默认情况下最高),但显然这还远远不够
  • 我尝试在/etc/sysctl.conf中将fs.files-max增加到非常高的值,但似乎没有效果(无论是在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以获取更新后的限制。
3个回答

6

2
请确认您是否在使用WSL。原问题涉及Windows子系统Linux,它不支持systemd,因此如果编辑了systemd配置文件,这个问题将没有任何影响,这可能令人惊讶。也许我漏掉了什么,或者您漏掉了什么? - NotTheDr01ds
1
这是在WSL2上的情况。我在使用Ubuntu 20.04的WSL2时遇到了同样的打开文件数量问题。首先,我尝试了limits.conf和其他Linux发行版中我习惯的方法,然后我偶然发现了链接的答案,它为我解决了这个问题。 - Peter Salomonsen
2
很酷 - 就像我说的,我很惊讶,但感谢你的确认! - NotTheDr01ds
1
这是我在Ubuntu 22.04上唯一有效的解决方案。 - Aleksandar Pavić

1

临时增加会话的打开文件硬限制

运行以下3个命令(第一个是可选的),以检查当前打开文件限制,切换到管理员用户并增加该值。

$ ulimit -n
1024

$ su <user name>
<Enter password>

$ ulimit -n 65535

检查新的限制:

$ ulimit -n
65535

要检查所有的值,请运行以下代码:
$ ulimit -a

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接