facebook / watchman

Watches files and records, or triggers actions, when they change.
https://facebook.github.io/watchman/
MIT License
12.75k stars 992 forks source link

EMFILE: too many open files, watch #923

Open deepakverma4 opened 3 years ago

deepakverma4 commented 3 years ago

i'm facing below issue while generating archive in xcode

node:events:371
      throw er; // Unhandled 'error' event
      ^

Error: EMFILE: too many open files, watch
    at FSEvent.FSWatcher._handle.onchange (node:internal/fs/watchers:204:21)
Emitted 'error' event on NodeWatcher instance at:
    at NodeWatcher.checkedEmitError (/Users/igesia/work/mobile/igesia_mobile/node_modules/sane/src/node_watcher.js:143:12)
    at FSWatcher.emit (node:events:394:28)
    at FSEvent.FSWatcher._handle.onchange (node:internal/fs/watchers:210:12) {
  errno: -24,
  syscall: 'watch',
  code: 'EMFILE',
  filename: null
}

i'm on 2021.06.07.00 version of watchman

any idea how to fix this?

aeddi commented 3 years ago

Same problem here with the same version 2021.06.07.00 on an Apple Silicon Macbook (m1).

But in my case, there is a slight nuance (I don't know if it's your case too @deepakverma4):

Knowing that I tried a lot of random things like increasing a lot the ulimit in:

But nothing worked. :/

goff-studio commented 3 years ago

For me, I UNCHECKED "Open using Rosetta" for Xcode, and added arm64 in Excluded Architecture in: [TARGET]/Build Settings Architectures/Excluded Architectures

LarryNxumalo commented 3 years ago

Getting the same error: The project has been working fine until now.

node:events:371 throw er; // Unhandled 'error' event ^

Error: EMFILE: too many open files, watch at FSEvent.FSWatcher._handle.onchange (node:internal/fs/watchers:204:21) Emitted 'error' event on NodeWatcher instance at: at NodeWatcher.checkedEmitError (/Users/myusername/code/Uyaphi/node_modules/sane/src/node_watcher.js:143:12) at FSWatcher.emit (node:events:394:28) at FSEvent.FSWatcher._handle.onchange (node:internal/fs/watchers:210:12) { errno: -24, syscall: 'watch', code: 'EMFILE', filename: null } error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

deepakverma4 commented 3 years ago

i solved this error by following below steps

1) clone your repo into some separate location 2) run npm i 3) reset all caches by running this command cd ios && rm -rf ~/Library/Caches/CocoaPods Pods ~/Library/Developer/Xcode/DerivedData/\*; pod deintegrate; pod setup; pod install --repo-update

LarryNxumalo commented 3 years ago

i solved this error by following below steps

  1. clone your repo into some separate location
  2. run npm i
  3. reset all caches by running this command cd ios && rm -rf ~/Library/Caches/CocoaPods Pods ~/Library/Developer/Xcode/DerivedData/\*; pod deintegrate; pod setup; pod install --repo-update

This work perfectly so I am assuming it was caching, Thank you! @deepakverma4

Redseb commented 3 years ago

The above steps to clear cache didn't work for me.

  • If I run metro from a terminal running in Rosetta mode, with watchman installed using x86_64 brew (/usr/local/Homebrew), no problem to bundle my javascript files.
  • If I run metro from a regular terminal (without Rosetta mode), with watchman installed using arm64 brew (/opt/homebrew), I get the EMFILE: too many open files error

Thanks so much for this, installing watchman using x86_64 brew and adding it to my PATH let me build the app. Additionally, I had to follow this to get watchman working: https://github.com/facebook/watchman/issues/640#issuecomment-416983649

rishabhthakur11 commented 3 years ago

I am facing the same issue and I want to investigate more and work on this issue, can you please assign it to me.

chaohuichen commented 3 years ago

I have the same issue with the recent archive on my M1 MacBook air with Xcode 13.0 version.

`warning: the transform cache was reset. Welcome to React Native! Learn once, write anywhere

events.js:377 throw er; // Unhandled 'error' event ^

Error: EMFILE: too many open files, watch at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:178:28)`

Can someone please help me how to resolve it thanks

Saalim95 commented 3 years ago

I was also facing this issue while building archive in Xcode in my M1 Mac. Fortunately, it had resolved after following these steps:

  1. Install Rosetta2 & Homebrew in non-rosetta mode terminal from the following StackOverflow link

  2. Add this brew to the PATH or you can CD into /usr/local/Homebrew/bin and run ./brew install watchman

  3. In XCode, Go to Target > Build Settings > Architectures > Exclude Architectures. And add these two key-value pairs.

m1
chaohuichen commented 3 years ago

I was also facing this issue while building archive in Xcode in my M1 Mac. Fortunately, it had resolved after following these steps:

  1. Install Rosetta2 & Homebrew in non-rosetta mode terminal from the following StackOverflow link
  2. Add this brew to the PATH or you can CD into /usr/local/Homebrew/bin and run ./brew install watchman

Hi Salim95,

Thanks for sharing!! Now I can archive in x code

just to reshare, the StackOverflow answer I follow is https://stackoverflow.com/a/64997047/14657391

ekryski commented 3 years ago

I was able to solve this issue on a new M1 Macbook Air by just installing watchman directly with ARM version of brew (the one at /opt/homebrew/bin/brew) and tweaking the file descriptor sizes.

brew install watchman
sudo launchctl limit maxfiles 16384 16384 && ulimit -n 16384

I didn't have to change anything else.

CS-ThomasR commented 2 years ago

Has anyone been able to find a reliable fix for this yet? I am having the same issue, and tried so many different solutions, including the ones from this thread but had no luck at all.

I have posted this question on Stack Overflow with my particular circumstances but had no response, so would be forever grateful if anyone has a suggestion Question on Stack Overflow

nihil-pro commented 2 years ago

If anyone has problems with apple m1, there is a solution that works to me first install apple command line: xcode-select --install then install watchman: brew install watchman That's all

MubasharAli600 commented 2 years ago

I was also stuck in this error This works for me run this command globally

brew install watchman

thanhdevapp commented 2 years ago

arch -arm64 brew install watchman

mdbaniani commented 2 years ago

in my case , downgrading node from v14 to v12 solved the issue

emaxedon commented 2 years ago

UNCHECKED

If you are running your terminal with "Open using Rosetta", then having Xcode "Open using Rosetta" must also be checked and vice versa. This way depending on how people install Watchman (either with arch -arm64 or otherwise) then everything should coalesce.

So, running terminal with "Open using Rosetta", then installing Watchman via arch -arm64 brew install watchman, then running Xcode with "Open using Rosetta" should work.

luciusandi commented 2 years ago

hi @emaxedon i;ve tried your way but no luck

events.js:291 throw er; // Unhandled 'error' event ^

Error: EMFILE: too many open files, watch at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:168:28) Emitted 'error' event on NodeWatcher instance at: at NodeWatcher.checkedEmitError (/Users/lucius/www/tgp-mobile/gympod/node_modules/sane/src/node_watcher.js:143:12) at FSWatcher.emit (events.js:314:20) at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:174:12) { errno: -24, syscall: 'watch', code: 'EMFILE', filename: null }

still received this issue, anyone still having same problem with xcode 13?

UPDATE

export NODE_BINARY=/Users/[name]/.nvm/versions/node/v16.15.0/bin/node ../node_modules/react-native/scripts/react-native-xcode.sh

strillo commented 2 years ago

I was also facing this issue while building archive in Xcode in my M1 Mac. Fortunately, it had resolved after following these steps:

  1. Install Rosetta2 & Homebrew in non-rosetta mode terminal from the following StackOverflow link
  2. Add this brew to the PATH or you can CD into /usr/local/Homebrew/bin and run ./brew install watchman
  3. In XCode, Go to Target > Build Settings > Architectures > Exclude Architectures. And add these two key-value pairs.
m1

After several attempts using different methods I solved it by completely uninstalling anything Homebrew-related and using the method above to restore it. I also used NVM to install the latest node version (18.2), then used XCode NOT in Rosetta mode.

At some point I also cleared the caches with cd ios && rm -rf ~/Library/Caches/CocoaPods Pods ~/Library/Developer/Xcode/DerivedData/\*; pod deintegrate; pod setup; pod install --repo-update but I'm not sure if that was really necessary

hs029 commented 2 years ago

Same problem here with the same version 2021.06.07.00 on an Apple Silicon Macbook (m1).

But in my case, there is a slight nuance (I don't know if it's your case too @deepakverma4):

* If I run metro from a terminal running in Rosetta mode, with watchman installed using x86_64 brew (`/usr/local/Homebrew`), no problem to bundle my javascript files.

* If I run metro from a regular terminal (without Rosetta mode), with watchman installed using arm64 brew (`/opt/homebrew`), I get the `EMFILE: too many open files` error

Knowing that I tried a lot of random things like increasing a lot the ulimit in:

* `Start Packager` XCode script

* `Bundle React Native code` XCode script

* In a terminal before running manually metro

* In launchctl using `sudo launchctl limit maxfiles 65536 unlimited`

But nothing worked. :/

Have you solved this issue?

michaelraffin commented 2 years ago

in my case, I just moved my rn project folder to the root folder or /users/{name}

Ro-Mou commented 2 years ago

The only thing that worked for me also was moving the project to the root folder!

angeljerry0047 commented 2 years ago

Same problem here with the same version 2021.06.07.00 on an Apple Silicon Macbook (m1).

But in my case, there is a slight nuance (I don't know if it's your case too @deepakverma4):

  • If I run metro from a terminal running in Rosetta mode, with watchman installed using x86_64 brew (/usr/local/Homebrew), no problem to bundle my javascript files.
  • If I run metro from a regular terminal (without Rosetta mode), with watchman installed using arm64 brew (/opt/homebrew), I get the EMFILE: too many open files error

Knowing that I tried a lot of random things like increasing a lot the ulimit in:

  • Start Packager XCode script
  • Bundle React Native code XCode script
  • In a terminal before running manually metro
  • In launchctl using sudo launchctl limit maxfiles 65536 unlimited

But nothing worked. :/

Thank you

EliseyMartynov commented 2 years ago

@michaelraffin I'm not a RN developer, but facing errors with chokidar. Your comment helped me on a way to resolve my issue 😄

andy505050 commented 2 years ago

I was also stuck in this error This works for me run this command globally

brew install watchman

This works, thanks!

Yandamuri commented 2 years ago

rm -rf node_modules && npm install -- > worked for me in android

truonghongtrieu commented 2 years ago

I came across this error as well

This works for me

xcode-select --install

brew install watchman

thanks to the comments above!

gigby commented 1 year ago

MacOS: 3.0.1. xCode: 14.1 react-native: 0.62.3 node: 14.19.0 watchman: 2022.12.19.00


Yesterday everything worked. Today it's impossible to create release build due to exact this issue. Nothing from this thread helped (even stupid things a-la "recreate project in another directory")

Yandamuri commented 1 year ago

MacOS: 3.0.1. xCode: 14.1 react-native: 0.62.3 node: 14.19.0 watchman: 2022.12.19.00

Yesterday everything worked. Today it's impossible to create release build due to exact this issue. Nothing from this thread helped (even stupid things a-la "recreate project in another directory")

Did you try this? -- rm -rf node_modules && npm install

gigby commented 1 year ago

@Yandamuri This was the first action I did. Maybe you know I noticed that when I uninstall watchman via brew but xCode still generates this issue. Idk how it happens when there is no watchman installation on my computer at all. Probably watchman is dependency of jest (I saw it in package-lock.json) but why packager uses it instead of using brew installed watchman?? I confused completely

gigby commented 1 year ago

@Yandamuri It solved! But idk how. I just describe what I did to make watchman working as it was before these two terrible days of searching. Repeat one more time: noting from this thread helped me (and from another threds in react-native, articles from the internet etc).

PS: I really don't know how these wired steps lead me to the correct result. Maybe somebody clever could explain what happend.

Yandamuri commented 1 year ago

@gigby Let me explain what happened in my case

First, I was using node 14 in my machine and mobile app is running without any errors. Then I had to install node 12 for web version of mobile app and worked on web app only for few weeks. Then came back to mobile app to check some production issue and got the error when I ran the app. Then I removed node_modules and installed once again. Then Issue got resolved.

techniqs commented 1 year ago

i had the same problem with my M1 and a React Native project i tried to build/archive in Xcode. i first had to xcode-select --install but it gave me an estimate of 120 hours so i downloaded it manually from apple. Afterwards i could finally do brew install watchman, still had the error while i was trying to build/archive in xcode. After some debugging i found out that Xcode still didnt recognize watchman because it wasnt in its path. (For debugging measures i went to Target -> Build Phases -> Bundle React Native code and images and added a line watchman --version to check if watchman was recognized) After finding out it didnt, i added to the first line the path to my homebrew. export PATH=/opt/homebrew/bin:$PATH Then it finally worked :)

rweber-esri commented 1 year ago

I was encountering this error while attempting to run a local Ember dev server on a new M1 Max. My issue was related to ~/Library/LaunchAgents being owned by root instead of my current user. I realized this after running watchman watch-project /path/to/my/project and observing the error [cli] Failed to open /Users/<your_user>/Library/LaunchAgents/com.github.facebook.watchman.plist for write: Permission denied. Verify both ~/Library and ~/Library/LaunchAgents are owned by your user.

    watchman watch-project /path/to/your/project
    # Permissions error
    [cli] Failed to open /Users/<your_user>/Library/LaunchAgents/com.github.facebook.watchman.plist for write: Permission denied

    # check Library ownership
    ls -ld ~/Library
    # root owns Library
    drwx------@ 87 root  staff  2784 Jan 23 09:42 /Users/<your_user>/Library
    # fix Library ownership
    sudo chown $(id -u) ~/Library

    # check LaunchAgents ownership
    ls -ld ~/Library/LaunchAgents
    # root owns LaunchAgents
    drwxr-xr-x@ 4 root  staff  128 Jan 26 09:05 /Users/<your_user>/Library/LaunchAgents
    # fix LaunchAgents ownership
    sudo chown $(id -u) ~/Library/LaunchAgents

After fixing ownership of those directories, I no longer observed the EMFILE: too many open files error, was prompted by the OS to grant watchman access to the directory containing my project, and things worked as expected.

prageeth commented 1 year ago

Thanks to @techniqs, I fixed my issue by adding export PATH=/opt/homebrew/bin:$PATH in the Build Phases > Bundle React Native code & images section.

NOTE: Using RN: 0.71.3

set -e

export PATH=/opt/homebrew/bin:$PATH <---- add this line here

WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh"
REACT_NATIVE_XCODE="../node_modules/react-native/scripts/react-native-xcode.sh"

/bin/sh -c "$WITH_ENVIRONMENT $REACT_NATIVE_XCODE"

The reason is that Xcode runs a clean shell for build tasks, so any PATH updates done in your profile (e.g. ~/.zshrc) are not sourced and therefore Xcode cannot see the binaries installed via brew (in /opt/homebrew/bin)

Norcy commented 1 year ago

This Work for Me

https://stackoverflow.com/a/70177808/6455789

just add this line only image

Osvaldo111 commented 1 year ago

This Work for Me

https://stackoverflow.com/a/70177808/6455789

just add this line only image

The same worked for me. I did have that issue when archiving the target.

sureco-doug commented 1 year ago

brew install watchman on Mac M1 solved the issue for me. Did not have to specify the arch.

yohannesdagnachew commented 11 months ago
  1. updateing/installing homebrew from official site homebrew
  2. installing watchman: brew install watchman
emaxedon commented 11 months ago

This Work for Me

https://stackoverflow.com/a/70177808/6455789

just add this line only image

I tried every single other possible fix, and this was the only thing that worked for me.

simonxcheng commented 11 months ago

This Work for Me

https://stackoverflow.com/a/70177808/6455789

just add this line only image

Yes, this solution saved my world!

DearVikki commented 10 months ago

Thanks to @techniqs, I fixed my issue by adding export PATH=/opt/homebrew/bin:$PATH in the Build Phases > Bundle React Native code & images section.

NOTE: Using RN: 0.71.3

set -e

export PATH=/opt/homebrew/bin:$PATH <---- add this line here

WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh"
REACT_NATIVE_XCODE="../node_modules/react-native/scripts/react-native-xcode.sh"

/bin/sh -c "$WITH_ENVIRONMENT $REACT_NATIVE_XCODE"

The reason is that Xcode runs a clean shell for build tasks, so any PATH updates done in your profile (e.g. ~/.zshrc) are not sourced and therefore Xcode cannot see the binaries installed via brew (in /opt/homebrew/bin)

Wow, so thats the reason why "too many files" issue reoccurred after Xcode being updated in my case!! Good to know that, finally relieved! :D

cesarjr commented 8 months ago

I fixed it on my Macbook Sonoma M1 reinstalling watchman like this:

$ arch -x86_64 brew install watchman
C0dewithLokesh commented 6 months ago

i had the same problem with my M1 and a React Native project i tried to build/archive in Xcode. i first had to xcode-select --install but it gave me an estimate of 120 hours so i downloaded it manually from apple. Afterwards i could finally do brew install watchman, still had the error while i was trying to build/archive in xcode. After some debugging i found out that Xcode still didnt recognize watchman because it wasnt in its path. (For debugging measures i went to Target -> Build Phases -> Bundle React Native code and images and added a line watchman --version to check if watchman was recognized) After finding out it didnt, i added to the first line the path to my homebrew. export PATH=/opt/homebrew/bin:$PATH Then it finally worked :)

This solution worked for me thanku bro

rohithanss commented 6 months ago

I had same issue last night and after researching many hours, I finally got the solution: Reinstalling watchman solves it, although I was on the latest version. Keeping this here for reference: brew reinstall watchman

Thank me later :)

sorenbs commented 6 months ago

@rohithanss - I'll thank you right now! It fixed the issue for me :-)

ibrahmounk commented 6 months ago

For m1, and m2, just run sudo launchctl limit maxfiles 16384 16384 && ulimit -n 16384 And the problem will be solved

AlekseyP18 commented 5 months ago

I was also facing this issue while building archive in Xcode in my M1 Mac. Fortunately, it had resolved after following these steps:

  1. Install Rosetta2 & Homebrew in non-rosetta mode terminal from the following StackOverflow link
  2. Add this brew to the PATH or you can CD into /usr/local/Homebrew/bin and run ./brew install watchman
  3. In XCode, Go to Target > Build Settings > Architectures > Exclude Architectures. And add these two key-value pairs.
m1

Thanks a lot) I removed standart homebrew and followed-up your steps. It works!!!!)))

fatihsari commented 5 months ago

i had the same problem with my M1 and a React Native project i tried to build/archive in Xcode. i first had to xcode-select --install but it gave me an estimate of 120 hours so i downloaded it manually from apple. Afterwards i could finally do brew install watchman, still had the error while i was trying to build/archive in xcode. After some debugging i found out that Xcode still didnt recognize watchman because it wasnt in its path. (For debugging measures i went to Target -> Build Phases -> Bundle React Native code and images and added a line watchman --version to check if watchman was recognized) After finding out it didnt, i added to the first line the path to my homebrew. export PATH=/opt/homebrew/bin:$PATH Then it finally worked :)

Thank you. This work for me after 2 days 👍

dmitry-markevich commented 5 months ago

I faced the same issue today with the actual versions of watchman, node, Xcode, etc. The problem was in that I have had issues with the trunk repo and have temporarily added cocoapods repo that copies the whole huge pods list to local file system. Simply removing the cocoapods repo and reinstalling pods from trunk repo fixed the issue:

pod repo remove cocoapods