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 / *?
Гіффо

1
так, але я не думаю, що 1mb достатньо для завантаження файлів, тому змініть tmp-dir на інше місце, як у відповіді від Blu Angel
Якоб А.

3
Звучить, як ваш випадок використання може бути різним, але ось чудове рішення цієї проблеми з іншого питання SO.
Ісаак Грегсон

Для тих, хто натрапляє на це, ознайомтесь і з цією відповіддю . Використовуючи грунт і глот, можна використовувати багато годин, тому ця відповідь детально пояснює, як це збільшити.
Сейрія

Відповіді:


1273

Запустіть команду нижче, щоб уникнути 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

Це також буде зберігатися через перезавантаження. Джерело технічних деталей



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 a C e), але чому б просто не дати користувачам цю інформацію наперед ?
Шадоніня

73

ENOSPC означає, що на диску немає місця.

Можливо /tmp, повно? Ви можете налаштувати npmвикористання іншої тимчасової папки, встановивши npm config set tmp /path/to/some/other/dirабо, можливо, видалити все з /tmpпапки.

Джерело: npm 1.1.21 не може записати, ENOSPC у npm-репо в github.

Примітка. Я вирішив свою проблему способом, описаним у вищезгаданому джерелі. Однак див. Відповідь Муралі Кришна нижче, яка є більш вичерпною.


Я очистив / tmp папку та змінив папку temp npm, але маю ту саму проблему. npm config get tmpшоу / vol / розгорнути / tmp
Giffo

чи можете ви знову показати своє місце? вихід, який ви отримаєте Після зміни реж.
Blu

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

1
у вас є слухач помилок? якщо не більше, ніж написати один, а потім перевірити отриманий результат
Blu

72
неправильно, ця помилка трапляється часто в робочих просторах розробника під час перегляду файлів (через grunt / gulp). Це пов’язано з обмеженням unix, скільки файлів може переглядати процес (нативні годинники). Інша відповідь (echo fs.inotify.max_user_watches = 524288) - це рішення у цих випадках.
ракберо


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

Якщо ви хочете знати, як збільшити кількість інотифікованих спостерігачів, лише натисніть на посилання.


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

7

Перезавантаження машини вирішило проблему для мене. Я спершу спробував витерти, /tmp/але вузол все ще скаржився.


Проблема повернулася після перезавантаження. Doing dedupeдопоміг.
Парнаб Санял

4

В Linux це, швидше за все, обмеження на кількість переглядів файлів.

Сервер розробки використовує inotify для здійснення гарячого перезавантаження. API 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, і він працює і тут. Це може бути корисно для тих, хто не має доступу до системних файлів конф.

CHOKIDAR_USEPOLLING=1 npm start

2

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

tracker-control -r

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


1
Забули вказати це, так, я опинився в тій же ситуації: Arch + GNOME
Denys Vitali

2

Якщо ваше /tmpкріплення у файловій системі Linux встановлено у вигляді переповнення (часто розміром у 1 МБ), це, ймовірно, ви не вказали /tmpяк власний розділ, а ваша коренева файлова система заповнена та /tmpперерахована як резервна.

Щоб виправити це, після того як ви очистите простір, просто відключіть резервний запас, і він повинен повторно встановити його в початковому пункті:

sudo umount overflow

2

Якщо ви зіткнулися з цією помилкою під час спроби запуску ember serverкоманди, будь ласка, rm -rf tmpдовідник. Потім ember sзнову біжи . Це мені допомогло.


2

У мене була така ж помилка. Поки я запускаю програму Reactjs. Що я роблю, це просто видалити папку node_modules та ввести та знову встановити node_modules. Це видалить помилку.


це справді працює, чому це знижується - це питання. Але це вирішує проблему, то що ще потрібно?
AlexNikonov

1
Не знаю, у народів може бути зі мною якесь особисте питання. hahaha
Ghayyas Mubashir

1

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

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


1

Це звучить дуже дивно, але так, система перезавантажиться або killall nodeвирішує проблему для мене.


-15

У моєму випадку на Linux Linux sudoing виправив проблему.

Приклад:

sudo gulp dev

5
Це небезпечно! Це, мабуть, вдалося, оскільки певний відсоток місця на диску зарезервований під корінь, що не вирішує основну проблему - немає простору, як непривілейований користувач (у цільовому місці).
Ліам Доусон

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