React Native Error: ENOSPC: System limit for number of file watchers reached

React NativeWatchman

React Native Problem Overview


I have setup a new blank react native app.

After installing few node modules I got this error.

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

I know it's related to no enough space for watchman to watch for all file changes.

I want to know what's the best course of action to take here ?

Should I ignore node_modules folder by adding it to .watchmanconfig ?

React Native Solutions


Solution 1 - React Native

Linux uses the inotify package to observe filesystem events, individual files or directories.

Since React / Angular hot-reloads and recompiles files on save it needs to keep track of all project's files. Increasing the inotify watch limit should hide the warning messages.

You could try editing

# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches

# config variable name (not runnable)
fs.inotify.max_user_watches=524288

Solution 2 - React Native

The meaning of this error is that the number of files monitored by the system has reached the limit!!

Result: The command executed failed! Or throw a warning (such as executing a react-native start VSCode)

Solution:

Modify the number of system monitoring files

Ubuntu

sudo gedit /etc/sysctl.conf

Add a line at the bottom

fs.inotify.max_user_watches=524288

Then save and exit!

sudo sysctl -p

to check it

Then it is solved!

Solution 3 - React Native

You can fix it, that increasing the amount of inotify watchers.

If you are not interested in the technical details and only want to get Listen to work:

  • If you are running Debian, RedHat, or another similar Linux distribution, run the following in a terminal:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

  • If you are running ArchLinux, run the following command instead

$ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Then paste it in your terminal and press on enter to run it.


The Technical Details

Listen uses inotify by default on Linux to monitor directories for changes. It's not uncommon to encounter a system limit on the number of files you can monitor. For example, Ubuntu Lucid's (64bit) inotify limit is set to 8192.

You can get your current inotify file watch limit by executing:

$ cat /proc/sys/fs/inotify/max_user_watches

When this limit is not enough to monitor all files inside a directory, the limit must be increased for Listen to work properly.

You can set a new limit temporary with:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

If you like to make your limit permanent, use:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

You may also need to pay attention to the values of max_queued_events and max_user_instances if listen keeps on complaining.

Solution 4 - React Native

From the official document:

"Visual Studio Code is unable to watch for file changes in this large workspace" (error ENOSPC)

When you see this notification, it indicates that the VS Code file watcher is running out of handles because the workspace is large and contains many files. The current limit can be viewed by running:

cat /proc/sys/fs/inotify/max_user_watches

The limit can be increased to its maximum by editing

> /etc/sysctl.conf

and adding this line to the end of the file:

> fs.inotify.max_user_watches=524288

The new value can then be loaded in by running

> sudo sysctl -p

Note that Arch Linux works a little differently, See Increasing the amount of inotify watchers for details.

While 524,288 is the maximum number of files that can be watched, if you're in an environment that is particularly memory constrained, you may wish to lower the number. Each file watch takes up 540 bytes (32-bit) or ~1kB (64-bit), so assuming that all 524,288 watches are consumed, that results in an upper bound of around 256MB (32-bit) or 512MB (64-bit).

> Another option

is to exclude specific workspace directories from the VS Code file watcher with the files.watcherExclude setting. The default for files.watcherExclude excludes node_modules and some folders under .git, but you can add other directories that you don't want VS Code to track.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

Solution 5 - React Native

delete react node_modules

rm -r node_modules

yarn or npm install

yarn start or npm start

if error occurs use this method again

Solution 6 - React Native

  1. Firstly you can run every time with root privileges

    sudo npm start

  2. Or you can delete node_modules folder and use npm install to install again

  3. or you can get permanent solution

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Solution 7 - React Native

It happened to me with a node app I was developing on a Debian based distro. First, a simple restart solved it, but it happened again on another app.

Since it's related with the number of watchers that inotify uses to monitors files and look for changes in a directory, you have to set a higher number as limit:

I was able to solve it from the answer posted here (thanks to him!)

So, I ran:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Read more about what’s happening at https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

Hope it helps!

Solution 8 - React Native

Remembering that this question is a duplicated: see this answer at original question

A simple way that solve my problem was:

npm cache clear 

best practice today is

npm cache verify 

npm or a process controlled by it is watching too many files. Updating max_user_watches on the build node can fix it forever. For debian put the following on terminal:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

If you want know how Increase the amount of inotify watchers only click on link.

Solution 9 - React Native

I solved this issue by using sudo ie

sudo yarn start

or

sudo npm start

Use sudo to solve this issue will force the number of watchers to be increased without apply any modifications in system settings. Use sudo to solve this kind of issue is never recommended, although it's a choice that have to be made by you, hope you choose wisely.

Solution 10 - React Native

Easy Solution

I found, that a previous solution work well in my case. I removed node_modules and clear the yarn / npm cache.

Long Tail Solution

If you want to have a long-tail solution - e.g. if you often be catched by this error - you can increase the value of allowed watchers (depending on your available memory)

To figure out the current used amount of watchers, instead of only guessing, you can use this handy bash-script:

https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers

I suggest to set the max_user_watches temporary to a high value: sudo sysctl fs.inotify.max_user_watches=95524288 and run the script.

How to calculate how much you can use

Each watcher needs

  • 540 bytes (32-bit system), or
  • 1 kB (double - on 64-bit OS

So if you will allow to use 512MB (on 64Bit), you set something 524288 as value.

Other way around, you can take the amount of memory you will set, and multiply it by 1024.

Example:

  512 * 1024 =   52488
 1024 * 1024 = 1048576 

It shows you the exact amount of the current used inotify-consumers. So you might have an better Idea, how much you should increase the limit.

Solution 11 - React Native

If you are running your project in Docker, you should do the echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf and all other commands in the host machine, since the container will inherit that setting automatically (and doing it directly inside it will not work).

Solution 12 - React Native

Late answer, and there are many good answers already.

In case you want a simple script to check if the maximum file watches is big enough, and if not, increase the limit, here it is:

#!/usr/bin/env bash

let current_watches=`sysctl -n fs.inotify.max_user_watches`

if (( current_watches < 80000 ))
then
  echo "Current max_user_watches ${current_watches} is less than 80000."
else
  echo "Current max_user_watches ${current_watches} is already equal to or greater than 80000."
  exit 0
fi

if sudo sysctl -w fs.inotify.max_user_watches=80000 && sudo sysctl -p && echo fs.inotify.max_user_watches=80000 | sudo tee /etc/sysctl.d/10-user-watches.conf
then
  echo "max_user_watches changed to 80000."
else
  echo "Could not change max_user_watches."
  exit 1
fi

The script increases the limit to 80000, but feel free to set a limit that you want.

Solution 13 - React Native

Using the sysctl -p approach after setting fs.inotify.max_user_watches did not work for me (by the way this setting was already set to a high value, likely from me trying to fix this issue a while back ago, using the commonly recommended workaround(s) above).

The best solution to the problem I found here, and below I share the performed steps in solving it - in my case the issue was spotted while running visual studio code, but solving the issue should be the same in other instances, like yours:

  1. Use this script to identify which processes are requiring the most file watchers in your session.
  2. You can then query the current max_user_watches value with sysctl fs.inotify.{max_queued_events,max_user_instances,max_user_watches} and then set it to a different value (a lower value may do it) sudo sysctl -w fs.inotify.max_user_watches=16384
  3. Or you can simply kill the process you found in (1) that consumes the most file watchers (in my case, baloo_file)
  4. The above, however, will likely need to be done again when restarting the system - the process we identified as responsible for taking much of the file watchers will (in my case - baloo_file) - will again so the same in the next boot. So to permanently fix the issue - either disable or remove this service/package. I disabled it: balooctl disable.

Now run sudo code --user-data-dir and it should open vscode with admin privileges this time. (by the way when it does not - run sudo code --user-data-dir --verbose to see what the problem is - that's how I figured out it had to do with file watchers limit).

Update:
You may configure VS code file watcher exclusion patterns as described here. This may prove to be the ultimate solution, I am just not sure you will always know beforehand which files you are NOT interested watching.

Solution 14 - React Native

Root cause

Most answers above talk about raising the limit, not about taking away the root cause which is typically just a matter redundant watches, typically for files in node_modules.

Webpack

The answer is in the webpack 5 docs: watchOptions: { ignored: /node_modules/ }

Simply read here: https://webpack.js.org/configuration/watch/#watchoptionsignored

The docs even mention this as a "tip", quote:

> If watching does not work for you, try out this option. This may help > issues with NFS and machines in VirtualBox, WSL, Containers, or > Docker. In those cases, use a polling interval and ignore large > folders like /node_modules/ to keep CPU usage minimal.

VS Code

VS Code or any code editor creates lots of file watches too. By default many of them are completely redundant. Read more about it here: https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Solution 15 - React Native

As already pointed out by @snishalaka, you can increase the number of inotify watchers.

However, I think the default number is high enough and is only reached when processes are not cleaned up properly. Hence, I simply restarted my computer as proposed on a related github issue and the error message was gone.

Solution 16 - React Native

Please refer this link[1]. Visual Studio code has mentioned a brief explanation for this error message. I also encountered the same error. Adding the below parameter in the relavant file will fix this issue.

 fs.inotify.max_user_watches=524288

[1] https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Solution 17 - React Native

Another simple and good solution is just to add this to jest configuration:

watchPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/.git/"]

This ignores the specified directories to reduce the files being scanned

Solution 18 - React Native

While almost everyone suggests to increase a number of watchers, I couldn't agree that it is a solution. In my case I wanted to disable watcher completely, because of the tests running on CI using vui-cli plugin which starts web-pack-dev server for each test.

The problem was: when a few builds are running simultaneously they would fail because watchers limit is reached.

First things first I've tried to add the following to the vue.config.js:

module.exports = {
  devServer: {
    hot: false,
    liveReload: false
  }
}

Ref.: https://github.com/vuejs/vue-cli/issues/4368#issuecomment-515532738

And it worked locally but not on CI (apparently it stopped working locally the next day as well for some ambiguous reason).

After investigating web-pack-dev server documentation I found this: https://webpack.js.org/configuration/watch/#watch

And then this: https://github.com/vuejs/vue-cli/issues/2725#issuecomment-646777425

Long story short this what eventually solved the problem:

vue.config.js

module.exports = {
publicPath: process.env.PUBLIC_PATH,
devServer: {
    watchOptions: {
        ignored: process.env.CI ? "./": null,
  },
}

}

Vue version 2.6.14

Solution 19 - React Native

if you working with vs code editor any editor that error due to large number of files in projects. node_modules and build not required in it so remove in list. that all open in vs code files menu

You have to filter unnecessary folders file sidebar

  1. Goes to Code > Preferences > settings

  2. in search setting search keyword "files:exclude"

  3. Add pettern

**/node_modules

**/build

That's it

Solution 20 - React Native

In my case in Angular 13, I added in tsconfig.spec.json

 "exclude": [
    "node_modules/",
    ".git/"
  ]

thanks @Antimatter it gaves me the trick.

Solution 21 - React Native

I use ubuntu 20 server and i add in the file : /etc/sysctl.conf the below line

fs.inotify.max_user_watches=524288

Then save the file and run sudo sysctl -p

After that all is works fine!

Solution 22 - React Native

Generally we don't need to increase count of filewatchers In this case we will have more watchers

We need to remove redundant watchers what became zombie

The issue is that we have many filewatchers that are filling out our memory We just need remove these filewatchers (in case of node)

killall node

Solution 23 - React Native

I encountered this issue on a linuxmint distro. It appeared to have happened when there was so many folders and subfolders/files I added to the /public folder in my app. I applied this fix and it worked well...

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf

change directory into the /etc folder: cd /etc

then run this: sudo systcl -p

You may have to close your terminal and npm start again to get it to work.

If this fails i recommend installing react-scripts globally and running your application directly with that.

$ npm i -g --save react-scripts

then instead of npm start run react-scripts start to run your application.

Solution 24 - React Native

I tried increasing number as suggested but it didn't work.

I saw that when I login to my VM, it displayed "restart required"

I rebooted VM and it worked

sudo reboot

Solution 25 - React Native

it is to easy to fix this

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf

and run your project.

if there is fs.inotify.max_user_watches=524288 in your /etc/sysctl.conf, run same command(echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf). and run your project

Solution 26 - React Native

Solution 27 - React Native

Try Rebooting

I'd advise a system reboot first before anything else, and just observe.

Solution 28 - React Native

I had the same problem by using library wifi but when i changed my network it worked perfectly.

Change your network connection

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBadis MerabetView Question on Stackoverflow
Solution 1 - React NativeAbdulla ThanseehView Answer on Stackoverflow
Solution 2 - React NativeYASH THUMARView Answer on Stackoverflow
Solution 3 - React NativesnishalakaView Answer on Stackoverflow
Solution 4 - React NativeHoangYellView Answer on Stackoverflow
Solution 5 - React NativeThe ObliviousView Answer on Stackoverflow
Solution 6 - React NativeMD SHAYONView Answer on Stackoverflow
Solution 7 - React NativeRodrigo.A92View Answer on Stackoverflow
Solution 8 - React NativeDanrley PereiraView Answer on Stackoverflow
Solution 9 - React NativepremView Answer on Stackoverflow
Solution 10 - React NativesutherView Answer on Stackoverflow
Solution 11 - React NativeDiego M.F.View Answer on Stackoverflow
Solution 12 - React NativeAntonyView Answer on Stackoverflow
Solution 13 - React NativeVeverkeView Answer on Stackoverflow
Solution 14 - React NativePim HeijdenView Answer on Stackoverflow
Solution 15 - React NativeUchenduView Answer on Stackoverflow
Solution 16 - React NativeSenthuranView Answer on Stackoverflow
Solution 17 - React NativeAntimatterView Answer on Stackoverflow
Solution 18 - React NativekozloneView Answer on Stackoverflow
Solution 19 - React Nativemanoj patelView Answer on Stackoverflow
Solution 20 - React NativeNicolasView Answer on Stackoverflow
Solution 21 - React NativeCostas BakouliasView Answer on Stackoverflow
Solution 22 - React NativedguardView Answer on Stackoverflow
Solution 23 - React NativeTony Marfo OView Answer on Stackoverflow
Solution 24 - React NativesandejaiView Answer on Stackoverflow
Solution 25 - React NativeSefaUnView Answer on Stackoverflow
Solution 26 - React NativemahatmanichView Answer on Stackoverflow
Solution 27 - React NativeMarsAndBackView Answer on Stackoverflow
Solution 28 - React NativeSatar.619View Answer on Stackoverflow