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

问题描述

我的设置如下: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

正如这里的答案所写:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...