angular/angular-bazel-example

Error: too many open files in system

wayou opened this issue · 2 comments

wayou commented

Fail to run the example on macOS Mojave 10.14 Beta (18A347e) with the following output:

$ ibazel run src:devserver
Error getting Bazel info Bazel info returned a non key-value pair
Querying for files to watch...
Error watching file /Users/wayou/Documents/dev/github/angular-bazel-example/node_modules/core-js/modules/es7.symbol.async-iterator.js
Error: too many open files in system
Error watching file /Users/wayou/Documents/dev/github/angular-bazel-example/node_modules/@angular/core/esm2015/src/view/errors.js
Error: too many open files in system
Error watching file /Users/wayou/Documents/dev/github/angular-bazel-example/node_modules/resolve/test/subdirs.js
Error: too many open files in system
Error watching file /Users/wayou/Documents/dev/github/angular-bazel-example/node_modules/rxjs/_esm2015/internal/operators/bufferTime.js
Error: too many open files in system
Error watching file /Users/wayou/Documents/dev/github/angular-bazel-example/node_modules/@angular/core/src/error_handler.d.ts
...

Changing the kernal.macfiles helps but I wonder if that's the correct approach, or there's any other workarounds?

$ sudo sysctl -w kern.maxfiles=20480
kern.maxfiles: 12288 -> 20480

This should be fixed by the fine-grained npm dependencies:
https://github.com/bazelbuild/rules_nodejs#fine-grained-npm-package-dependencies

Another option under mac is to turn off the sandboxing
--genrule_strategy=standalone

(The root cause is that for each process Bazel starts, it makes an OS level sandbox where the inputs are linked, and that consumes filehandles. You either need fewer files as inputs, or disable the sandboxing feature, though the latter can mask hermeticity bugs.)

Npm fine grained deps is merged into angular-bazel-example so the number of files that need to be watched by iBazel is now much less. Only npm packages that are needed are now included as action inputs instead of all packages under node_modules.