My setup looks as follows: Windows 10, Release 1909 (Build 18363.1082), using WSL2 with an Ubuntu 20.04 environment. Everything works nicely most of the time, but there are some issues I cannot manage to solve.
During development using parcel
(React bundler), I run into the problem that the bundler apparently opens lots of files at the same time, and at a certain point, I run into the following problem:
EMFILE: too many open files, open '/home/myusername/Projects/some-project-path/node_modules/@material-ui/icons/esm/RoundedCornerRounded.js'
As parcel
seemingly does not easily support using something like graceful-fs
, I have tried to increase the limit for open files inside the Ubuntu environment. What I have tried so far:
ulimit -n 4096
(which is the highest possible by default), but it's apparently (by far?) not enoughfs.files-max
to something really high in /etc/sysctl.conf
, but it doesn't seem to have an effect (neither after sysctl -p
nor after a restart of wsl
)fs.inotify.max_user_watches
, but that did not seem to have an effect either/etc/security/limits.conf
did not seem to have an effectDefaultLimitNOFILE
in /etc/systemd/system.conf
can have an effect (so I did that as well)Has anybody manage to solve a similar system on Ubuntu 20.04 on WSL2? This left me pretty stumped, and it prevents me from using parcel
inside this environment. That's a real pity, as really everything else is working really fine.
So I have found out that my changes in various places (probably the one in /etc/security/limits.conf
) has had some kind of effect. Just not when logging in directly. This illustrates this:
donmartin@SOMEMACHINE:~$ ulimit -Hn
4096
donmartin@SOMEMACHINE:~$ su donmartin
Password:
donmartin@SOMEMACHINE:~$ ulimit -Hn
65536
donmartin@SOMEMACHINE:~$
Which means: If I su
to my own user, the ulimit
has indeed been raised. But if I log in just as normal using Windows Terminal, this limit is not in effect. Even more puzzled now - BUT - I have a workaround for my problem. Having set my values to 65536
, the parcel
build now works, running as my own user. Go figure! I still don't quite know which setting was changing the behaviour now - perhaps somebody has more thorough information on how this works and/or how I can make this also the default without having to do a su
to get the updated limits.
You can increase the maximum number of open files on the Linux host by setting a new value in the kernel variable file, /proc/sys/fs/file-max. This command forces the limit to 262144 files which is four times the default setting. (The default setting is appropriate for many environments.)
You can increase the limit of opened files in Linux by editing the kernel directive fs. file-max . For that purpose, you can use the sysctl utility. Sysctl is used to configure kernel parameters at runtime.
I had to add the following line to /etc/systemd/user.conf
:
DefaultLimitNOFILE=65535
As written in the answer here:
https://superuser.com/questions/1200539/cannot-increase-open-file-limit-past-4096-ubuntu/1200818#1200818?s=1b927bb17396480da98a94cbacf8da62
Try this:
$ 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With