我的设置如下: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
以获取更新后的限制。
systemd
,因此如果编辑了systemd
配置文件,这个问题将没有任何影响,这可能令人惊讶。也许我漏掉了什么,或者您漏掉了什么? - NotTheDr01ds