Реагирующая собственная ошибка: ENOSPC: Системное ограничение на число достигнутых наблюдателей файла

Я установил новое пустое приложение для реагирования.

После установки нескольких узловых модулей я получил эту ошибку.

enter image description here

Я знаю, что это связано с нехваткой места для сторожа, чтобы наблюдать за всеми изменениями файлов.

Я хочу знать, какой лучший курс действий здесь предпринять?

Должен ли я игнорировать папку node_modules, добавив ее в .watchmanconfig?

Ответы

Ответ 1

Вы можете попробовать редактирование

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

cat /proc/sys/fs/inotify/max_user_watches

fs.inotify.max_user_watches=524288

Ответ 2

Смысл этой ошибки в том, что количество файлов, отслеживаемых системой, достигло предела !!

Результат: команда выполнена не удалась! Или сгенерируйте предупреждение (например, запустите реактивный запуск vsocde)

Решение:

Изменить количество файлов системного мониторинга

Ubuntu

sudo gedit /etc/sysctl.conf

Добавьте строку внизу

fs.inotify.max_user_watches=524288

Затем сохраните и выйдите!

sudo sysctl -p

проверить это

Тогда это решено!

Ответ 3

Самый простой способ решить эту ошибку - перезапустить

Ответ 4

Из официального документа:

"Код Visual Studio не может отслеживать изменения файлов в этом большом рабочем пространстве" (ошибка ENOSPC)

Когда вы видите это уведомление, оно указывает на то, что в наблюдателе файла кода VS не хватает дескрипторов, поскольку рабочая область велика и содержит много файлов. Текущий лимит можно посмотреть, запустив:

cat /proc/sys/fs/inotify/max_user_watches

Ограничение может быть увеличено до максимума путем редактирования

/etc/sysctl.conf

и добавив эту строку в конец файла:

fs.inotify.max_user_watches=524288

Затем можно загрузить новое значение, запустив

sudo sysctl -p

Обратите внимание, что Arch Linux работает немного по-другому, подробности смотрите в разделе Увеличение количества наблюдателей inotify.

Хотя 524 288 - это максимальное количество файлов, которое можно просмотреть, если вы находитесь в среде, которая особенно ограничена в памяти, вы можете уменьшить это число. Каждый просмотр файла занимает 540 байт (32-бит) или ~ 1 КБ (64-бит), поэтому предполагается, что используются все 524 288 часов, что приводит к верхней границе около 256 МБ (32-бит) или 512 МБ (64-бит)).

Другой вариант

заключается в исключении определенных каталогов рабочей области из средства просмотра файлов VS Code с параметром files.watcherExclude. Значение по умолчанию для files.watcherExclude исключает node_modules и некоторые папки в .git, но вы можете добавить другие каталоги, которые вы не хотите, чтобы VS Code отслеживал.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

Ответ 5

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

Если вас не интересуют технические подробности, и вы хотите получить прослушивание, выполните следующие действия.

  • Если вы используете Debian, RedHat или другой аналогичный дистрибутив Linux, запустите в терминале следующее:

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

  • Если вы используете ArchLinux, вместо этого выполните следующую команду

    $ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Затем вставьте его в свой терминал и нажмите Enter, чтобы запустить его.


Технические подробности

Listen использует inotify по умолчанию в Linux для отслеживания изменений в каталогах. Нередко встречается системное ограничение на количество файлов, которые вы можете отслеживать. Например, лимит Uontu Lucid (64-битный) для inotify установлен на 8192.

Вы можете получить текущий предел просмотра файлов inotify, выполнив:

$ cat /proc/sys/fs/inotify/max_user_watches

Если этого предела недостаточно для отслеживания всех файлов в каталоге, этот предел необходимо увеличить, чтобы функция Listen работала правильно.

Вы можете установить новый лимит временно с помощью:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Если вы хотите, чтобы ваш лимит был постоянным, используйте:

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

Вам также может понадобиться обратить внимание на значения max_queued_events и max_user_instances, если прослушивание продолжает жаловаться.