【发布时间】: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 以获得更新的限制。
【问题讨论】:
标签: windows-subsystem-for-linux parceljs ulimit wsl-2