Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OS X: "Error: EMFILE: too many open files, watch" when running tests #4540

Closed
mdr opened this issue May 30, 2018 · 3 comments
Closed

OS X: "Error: EMFILE: too many open files, watch" when running tests #4540

mdr opened this issue May 30, 2018 · 3 comments

Comments

@mdr
Copy link

@mdr mdr commented May 30, 2018

Is this a bug report?

Maybe. This may well not be a create-react-app issue as such, but hoping someone could point me in the right direction.

Environment

Environment:
  OS:  macOS High Sierra 10.13.3
  Node:  10.1.0
  Yarn:  1.6.0
  npm:  5.6.0
  Watchman:  Not Found
  Xcode:  Not Found
  Android Studio:  Not Found

Packages: (wanted => installed)
  react: ^16.4.0 => 16.4.0
  react-dom: ^16.4.0 => 16.4.0
  react-scripts: 1.1.4 => 1.1.4

Steps to Reproduce

  1. npx create-react-app new-app
  2. Add the following dependencies to package.json:
"dependencies": {
    "@material-ui/core": "^1.0.0",
    "@material-ui/icons": "^1.0.0",
    "classnames": "^2.2.5",
    "react": "^16.4.0",
    "react-dom": "^16.4.0",
    "react-router-dom": "^4.2.2",
    "react-scripts": "1.1.4",
    "recompose": "^0.27.1",
    "typeface-roboto": "^0.0.54"
  },
  "devDependencies": {
    "@storybook/addon-actions": "^3.4.5",
    "@storybook/addon-knobs": "^3.4.5",
    "@storybook/addon-links": "^3.4.5",
    "@storybook/addon-notes": "^3.4.5",
    "@storybook/addons": "^3.4.5",
    "@storybook/react": "^3.4.5",
    "babel-core": "^6.26.3",
    "babel-runtime": "^6.26.0",
    "cypress": "^2.1.0",
    "react-test-renderer": "^16.4.0"
  },
  1. Run yarn test

Expected Behavior

Tests are executed.

Actual Behavior

$ yarn test
yarn run v1.6.0
(node:1262) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
$ react-scripts test --env=jsdom
2018-05-30 13:31 node[1264] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
2018-05-30 13:31 node[1264] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
2018-05-30 13:31 node[1264] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
events.js:167
      throw er; // Unhandled 'error' event
      ^

Error: EMFILE: too many open files, watch
    at FSEvent.FSWatcher._handle.onchange (fs.js:1352:28)
Emitted 'error' event at:
    at FSEvent.FSWatcher._handle.onchange (fs.js:1358:12)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Other

I've tried first raising the limit of open files to 65536, but still get the above error:

$ ulimit -a
...
open files                      (-n) 65536
...

Any ideas on how to work around this? Thanks!

@Timer

This comment has been minimized.

Copy link
Collaborator

@Timer Timer commented May 30, 2018

The easiest thing would be to install Watchman:

$ brew update
$ brew install watchman

If you don't have brew, do this first:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
@mdr

This comment has been minimized.

Copy link
Author

@mdr mdr commented May 30, 2018

Thanks, that fixes the problem -- what's the story on this one, out of interest?

@Timer

This comment has been minimized.

Copy link
Collaborator

@Timer Timer commented May 30, 2018

Machines vary, but there is a limit to the number of open files (because of how it watches, more on that later) -- if you use sudo it might fix it, but that's a meh fix.

Lots of people don't hit this until they start depending on a ton of dependencies, which is why there's not many issues about it.

Watchman is specially designed to watch arbitrarily large number of files without issue, and people normally install it by the time their applications grow to such a large size because Jest recommends it in the docs somewhere iirc.


Anyway, the important part of the backstory is that newer versions of Jest watch files differently now to prevent this issue, and that version is available in the 2.0 beta.

1.0 is using an older version of Jest which a patch-release isn't going to be cut for.

@Timer Timer closed this May 30, 2018
olizilla added a commit to olizilla/dotfiles that referenced this issue Nov 13, 2018
tlake added a commit to quintilesims/orca that referenced this issue Nov 15, 2018
… and linting

When I first introduced these pre-commit checks, I ran into an
error in testing on OS X:

"Error: EMFILE: too many open files, watch"
I installed 'watchman' through brew in order to fix it as suggested
in this issue:

facebook/create-react-app#4540
tlake added a commit to quintilesims/orca that referenced this issue Nov 16, 2018
… and linting

When I first introduced these pre-commit checks, I ran into an
error in testing on OS X:

"Error: EMFILE: too many open files, watch"
I installed 'watchman' through brew in order to fix it as suggested
in this issue:

facebook/create-react-app#4540
tlake added a commit to quintilesims/orca that referenced this issue Nov 19, 2018
… and linting

When I first introduced these pre-commit checks, I ran into an
error in testing on OS X:

"Error: EMFILE: too many open files, watch"
I installed 'watchman' through brew in order to fix it as suggested
in this issue:

facebook/create-react-app#4540
@lock lock bot locked and limited conversation to collaborators Jan 19, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.