Помилка Nodemon: досягнуто системне обмеження кількості спостерігачів файлів


102

Я вивчаю graphqlта використовую prisma-bindingдля операцій graphql. Я стикаюся з цією nodemonпомилкою під час запуску мого вузлового сервера, і він дає мені шлях до файлу схеми, який автоматично генерується graphql-cli. Хто-небудь може сказати мені, про що ця помилка?

Помилка:

Internal watch failed: ENOSPC: System limit for number of file watchers reached, watch '/media/rehan-sattar/Development/All projects/GrpahQl/graph-ql-course/graphql-prisma/src/generated

Це линукс ULIMIT помилка дивіться тут stackoverflow.com/questions/34588 / ...
Janith

Спробував це! Повторна помилка!
Rehan Sattar

2
Ви, мабуть, переглядаєте забагато файлів. Можливо, це також включає каталог nod_modules?
Міккель

node_modules є важливими, оскільки всі пакети є. Я намагався вбити попередні процеси, що працюють на порту мого сервера, це спрацювало для мене, але я не знаю, скільки часу це займе зараз: D
Рехан Саттар

Відповіді:


226

Якщо ви використовуєте Linux, ваш проект перевищує обмеження кількості спостерігачів у вашій системі

Щоб це виправити, спробуйте на своєму терміналі:

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

2
використовувати sysctl --systemдля перезавантаження для новіших систем
YLJ 06.03.20

6
чи є якісь інші наслідки, які ми повинні знати, коли робимо це? Я знав, що це допомагає вирішити проблему, я спробував це сам. Але я трохи сумніваюся, які можливі побічні ефекти може викликати це виправлення.
Алді

@Aldee щодо технічних наслідків цієї зміни, я рекомендую перевірити цю вікі: github.com/guard/listen/wiki/…
Ісак Моура,

Це також вирішило багато проблем із плагінами npm. thx
The Bumpaster

3
Я б не рекомендував так сильно його збільшувати, якщо ви не впевнені, скільки їх використовується. Перевірте номер, що використовується, за допомогою наступногоfind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull

23

Іноді у мене виникає ця проблема під час роботи з VSCode на моїй машині Ubuntu.

У моєму випадку допомагає таке обхідне рішення:

зупиніть спостерігача, закрийте VScode, запустіть спостерігач, знову відкрийте VSCode.


Це правильно! Через VSCode. Це має бути режим автоматичного збереження.
Hùng Ng Vi

19

Вам потрібно збільшити обмеження кількості сповіщаючих спостерігачів для користувачів вашої системи. Ви можете зробити це з командного рядка за допомогою:

sudo sysctl -w fs.inotify.max_user_watches=100000

Однак це збережеться лише до перезавантаження. Щоб зробити це постійним, додайте файл із іменем /etc/sysctl.d/10-user-watches.confіз таким вмістом:

fs.inotify.max_user_watches = 100000

Після виконання вище (або будь-який інший) зміни, ви можете перезавантажити налаштування з усіх конфігураційних файлів Sysctl в /etcс sudo sysctl -p.


Дуже дякую! Працював у мене !! Але куди я повинен додати цей файл?
Рехан Саттар

@RehanSattar Створіть файл /etc/sysctl.d/10-user-watches.confі в нього покладіть fs.inotify.max_user_watches = 100000.
cjs

Поклавши це тут для повноти echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter

2
використовувати sysctl --systemдля перезавантаження для новіших систем
YLJ 06.03.20

4

Для тестування змін я встановив тимчасовий параметр зі значенням 524288.

sysctl -w fs.inotify.max_user_watches=524288

тоді я приступаю до перевірки:

npm run serve

І проблема була вирішена, щоб зробити її постійною, спробуйте додати рядок у файл "/etc/sysctl.conf", а потім перезапустіть службу sysctl:

cat /etc/sysctl.conf |tail -n 2
fs.inotify.max_user_watches=524288

sudo systemctl restart systemd-sysctl.service

Ця підказка для тимчасового тестування безцінна. Дякую
intmarinoreturn0

1

Важко знати, на скільки збільшити кількість спостерігачів. Отже, ось утиліта для подвоєння кількості спостерігачів:

function get_inode_watcher_count() {
  find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | 
  xargs cat | 
  grep -c '^inotify'
}

function set_inode_watchers() {
  sudo sysctl -w fs.inotify.max_user_watches="$1"
}

function double_inode_watchers() {
  watcher_count="$(get_inode_watcher_count)"
  set_inode_watchers "$((watcher_count * 2))"

  if test "$1" = "-p" || test "$1" = "--persist"; then
    echo "fs.inotify.max_user_watches = $((watcher_count * 2))" > /etc/sysctl.d/10-user-watches.conf
  fi
}

# Usage
double_inode_watchers
# to make the change persistent
double_inode_watchers --persist

0

У мене була та ж проблема, однак моя надходила з webpack. На щастя, вони знайшли чудове рішення на своєму сайті :

Для деяких систем перегляд багатьох файлів може призвести до великої кількості процесора або пам'яті. Можна виключити величезну папку, наприклад node_modules, використовуючи регулярний вираз:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};

-3

У Linux я насправді працював із sudo. sudo npm start


5
Це часто спрацьовує, оскільки root, як правило, має набагато вищий ліміт інотифікації годин, ніж звичайні користувачі, але дуже погана ідея запускати речі як root, коли їм це не потрібно. Дивіться мою відповідь на це запитання про те, як змінити обмеження для користувачів.
cjs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.