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 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
Copy link
Contributor

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
Copy link
Author

mdr commented May 30, 2018

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

@Timer
Copy link
Contributor

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants