Node.js: что такое ошибка ENOSPC и как ее решить?


349

У меня проблема с Node.js и загрузкой файлов на сервер. Для загрузки файлов на сервер я использую этот плагин . При запуске загрузки файла на сервер произошел сбой процесса Node.js, который выдает ошибку:

Ошибка: ENOSPC.

Код сервера не работает.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  4.1G  3.5G  55% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  168K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
/dev/xvdf       9.9G  3.0G  6.5G  32% /vol
overflow        1.0M  1.0M     0 100% /tmp

1
«ENOSPC» означает, что на диске нет места, поэтому где вы сохраняете файл? или может быть / TMP полон?
Джейкоб А.

Я сохраняю файлы в / dev / xvda1. Могу ли я сделать rm -rf / tmp / *?
Giffo

1
да, но я не думаю, что 1mb достаточно для загрузки файлов, поэтому измените tmp-dir на другое место, как в ответе от Blu Angel
Jacob A.

3
Похоже, ваш вариант использования может отличаться, но вот отличное решение этой проблемы из другого вопроса SO.
Исаак Грегсон

Для любого, кто сталкивается с этим, проверьте этот ответ . Использование grunt и gulp может использовать много часов, поэтому в этом ответе подробно описано, как их увеличить.
Сейрия

Ответы:


1274

Запустите приведенную ниже команду, чтобы избежать ENOSPC:

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

Для Arch Linux добавьте эту строку в /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Затем выполните:

sysctl --system

Это также будет сохраняться при перезагрузке. Технические детали Источник


25
Вот что он делает. github.com/guard/listen/wiki/...
AGUS Syahputra

2
Это не случайное число. Каждые используемые часы inotify занимают 540 байт (32-разрядная система) или 1 кБ (дважды - на 64-разрядной). Это происходит из памяти ядра, которая не может быть заменена. Итак, предполагая, что вы установили максимум на 524288, и все были использованы (маловероятно), вы будете использовать прибл. 256 МБ / 512 МБ 32-битной / 64-битной памяти ядра.
Мурали Кришна

Теоретически нет максимального значения, если у вас достаточно оперативной памяти. На практике приложения официально рекомендуют 524288, и люди устанавливают его на 2 миллиона с соответствующим использованием памяти.
Мурали Кришна

Это помогло мне решить проблему, и эта ссылка github.com/guard/listen/wiki/… содержит все детали. Спасибо
amitsin6h

Кто-нибудь еще находит странным, что ошибка, которая выходит просто ENOSPC? Почему бы не иметь описание сразу после вывода, как ENOSPC - no space on drive? Конечно, код ошибки имеет смысл , когда вы знаете , что это значит ( E rror NO SP C е), но почему бы просто не дать пользователям , что информация на фронте?
Шадониня

73

ENOSPC означает, что на диске нет места.

Может /tmp, полно? Вы можете настроить npmиспользование другой временной папки, установив npm config set tmp /path/to/some/other/dirили удалив все из /tmpпапки.

Источник: npm 1.1.21 не может писать, ENOSPC в репозитории npm в github.

Заметьте, я решил свою проблему так, как описано в приведенном выше источнике. Однако, см . Ответ Мурали Кришны ниже, который является более полным.


Я очистил папку / tmp и изменил временную папку npm, но у меня такая же проблема. npm config get tmpshow / vol / deploy / tmp
Giffo

ты можешь показать свой аут снова? вывод, который вы получаете После смены режиссера
Blu

events.js:71 throw arguments[1]; // Unhandled 'error' event Error: ENOSPC, write
Giffo

1
у вас есть прослушиватель ошибок? если нет, то напишите один, а затем проверьте полученный результат
Blu

72
неправильно, эта ошибка часто возникает в рабочих средах разработчиков при просмотре файлов (через grunt / gulp). Это связано с лимитом Unix, сколько файлов может просматривать процесс (native watch). Другой ответ (echo fs.inotify.max_user_watches = 524288) является решением в этих случаях.
Cancebero


20

Простой способ решить мою проблему:

npm cache clear

npm или процесс, контролируемый им, просматривает слишком много файлов. Обновление max_user_watches на узле сборки может исправить это навсегда. Для debian установите на терминале следующее:

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

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


2
У меня эта проблема forever,исправлена, когда я создаю файл .foreverignoreи добавляю в него папкуnode_modules.
Vilintritenmert

7

Перезагрузка машины решила проблему для меня. Сначала я попытался стереть, /tmp/но узел все еще жаловался.


Проблема вернулась после перезагрузки. Делать dedupeпомогло.
Парнаб Саньял

4

В Linux это может быть ограничение на количество просмотров файлов.

Сервер разработки использует inotify для осуществления горячей перезагрузки. API inotify позволяет серверу разработки просматривать файлы и получать уведомления об их изменении.

Предел просмотра файлов inotify по умолчанию варьируется от дистрибутива к дистрибуции (8192 в Fedora). Потребности сервера разработки часто превышают этот предел.

Лучший способ - попытаться временно увеличить лимит просмотра файлов, а затем сделать это постоянным изменением конфигурации, если вас это устраивает. Обратите внимание, что это меняет конфигурацию всей вашей системы, а не только узла.

Чтобы просмотреть свой текущий лимит:

sysctl fs.inotify.max_user_watches

Чтобы временно установить новый лимит:

# this limit will revert after reset
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p
# now restart the server and see if it works

Чтобы установить постоянный лимит:

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

3

В Ubuntu 18.04 я попробовал трюк, который я использовал для повторной активации просмотра файла по ionic / node, и он также работает здесь. Это может быть полезно для тех, кто не имеет доступа к системным файлам conf.

CHOKIDAR_USEPOLLING=1 npm start

2

Я решил свою проблему, убив все процессы управления трекером (вы можете попробовать, если вы используете GDM, очевидно, не ваш случай, если скрипт работает на сервере)

tracker-control -r

Моя настройка: Arch с GNOME 3


1
Забыл уточнить это, да, я был в такой же ситуации: Arch + GNOME
Денис Виталий

2

Если ваше /tmpмонтирование в файловой системе Linux смонтировано как переполнение (часто размером в 1 МБ), это, вероятно, связано с тем, что вы не указали /tmpсвой собственный раздел и ваша корневая файловая система не была заполнена и /tmpбыла перемонтирована как резервный.

Чтобы исправить это после того, как вы очистили пространство, просто размонтируйте запасной вариант, и он должен перемонтироваться в исходной точке:

sudo umount overflow

2

Если вы столкнулись с этой ошибкой при попытке выполнить ember serverкоманду, пожалуйста, обратитесь в rm -rf tmpкаталог. Тогда беги ember sснова. Это помогло мне.


2

У меня была та же ошибка. Пока я запускаю приложение Reactjs. Я просто удаляю папку node_modules, набираю и снова устанавливаю node_modules. Это устранит ошибку.


это действительно работает, почему это понижено - это вопрос. Но это решает проблему, так что еще нужно?
АлексейНиконов

1
Не знаю, может быть, у людей есть личные проблемы со мной. хахаха
Гайяс Мубашир

1

Для меня я достиг максимального количества файлов, которое может иметь пользователь

Сверьте свои номера с quota -sи убедитесь, что число в файлах не слишком близко к квоте



-15

В моем случае, в Linux sudoing устранил проблему.

Пример:

sudo gulp dev

5
Это опасно! Вероятно, это удалось, поскольку определенный процент дискового пространства зарезервирован для пользователя root, что не решает основной проблемы - нет места, доступного непривилегированному пользователю (в целевом местоположении).
Лиам Доусон

Использование sudo - отличный способ добиться успеха, но большинство людей не понимают всего, что происходит при использовании sudo. В частности, с модулями npm и npm использование sudo может привести к тому, что root выполнит то, что пользователь не хочет выполнять root, например создание файла или использование защищенных портов. По сути, совет «использовать sudo» не имеет смысла (возможно, после того, как он на мгновение споткнулся и посмотрел на солнце), когда дело касается nvm / npm / node.
bschlueter
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.