Ошибка Nodemon: достигнуто системное ограничение на количество наблюдателей за файлами

103

Я изучаю 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 linux, см. Здесь stackoverflow.com/questions/34588/…
Джанит
Пробовал это! Опять та же ошибка!
Рехан Саттар
2
Вероятно, вы просматриваете слишком много файлов. Может быть, он также включает каталог nod_modules?
Mikkel
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
6
есть ли какие-то другие последствия, которые мы должны знать, когда делаем это? Я знал, что это помогает решить проблему, сам пробовал. Но я немного скептически отношусь к возможным побочным эффектам, которые может вызвать это исправление.
Aldee
@Aldee о технических последствиях этого изменения, я рекомендую проверить эту вики: github.com/guard/listen/wiki/…
Исак Моура,
Это также решило множество проблем с плагинами npm. thx
The Bumpaster 08
3
Я бы не рекомендовал так сильно увеличивать его, если вы не знаете, сколько из них уже используется. Проверьте используемый номер с помощью следующегоfind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Ник Булл
23

Иногда у меня возникает эта проблема при работе с VSCode на моем компьютере с Ubuntu.

В моем случае помогает следующий обходной путь:

остановите наблюдателя, закройте VScode, запустите наблюдатель, снова откройте VSCode.

Юрий Синицон
источник
Это правильно! Из-за VSCode. Должен быть режим автосохранения.
Hùng Ng Vi
20

Вам необходимо увеличить лимит наблюдателей inotify для пользователей вашей системы. Вы можете сделать это из командной строки с помощью:

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.

cjs
источник
Спасибо огромное! Сработало у меня !! Но куда мне добавить этот файл?
Рехан Саттар
@RehanSattar Создайте файл /etc/sysctl.d/10-user-watches.confи в него положите fs.inotify.max_user_watches = 100000.
cjs 06
Помещаем это здесь для полноты echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter
2
используйте sysctl --systemдля перезагрузки для более свежих систем
YLJ
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

У меня была такая же проблема, но моя исходила из веб-пакета. К счастью, они опубликовали на своем сайте отличное решение :

В некоторых системах просмотр большого количества файлов может привести к значительному использованию ЦП или памяти. Можно исключить огромную папку типа node_modules с помощью регулярного выражения:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};
Шалфей
источник
-3

В Linux я действительно работал с sudo. sudo npm start

Фернандо Силва Марансатто
источник
5
Это часто срабатывает, потому что root обычно имеет гораздо более высокий лимит просмотра inotify, чем обычные пользователи, но очень плохая идея запускать что-то от имени root, когда в этом нет необходимости. См. Мой ответ на этот вопрос о том, как изменить лимит пользователей.
cjs