问题描述
我的设置如下:Windows 10,版本1909(内部版本18363.1082),在Ubuntu 20.04环境中使用WSL2。大多数情况下,一切都很好,但是有些问题我无法解决。
在使用parcel
(反应捆绑程序)进行开发期间,我遇到了一个问题,即捆绑程序显然同时打开了很多个文件,并且在某个时候,我遇到了以下问题:
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
中设置软限制和硬限制似乎没有效果 - 我还发现,在
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:~$
这意味着:如果我向自己的用户su
ulimit
的确提出。但是,如果我使用Windows Terminal正常登录,则此限制无效有效。现在更加困惑-但是-我有解决问题的方法。将我的值设置为65536
之后,parcel
构建现在可以工作,并且以我自己的用户身份运行。去搞清楚!我仍然不太清楚现在哪个设置正在改变行为-也许有人对它的工作方式和/或如何将其设为默认值(而不必执行su
)进行更全面的了解限制。
解决方法
我必须在 /etc/systemd/user.conf
中添加以下行:
DefaultLimitNOFILE=65535
正如这里的答案所写: