272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||||||||||||||||
1 | ||||||||||||||||
Error: EMFILE: too many open files, open27.02.2018, 17:40. Показов 4877. Ответов 7
Метки нет (Все метки)
Добрый день, подскажите плииз!
Поймал ошибку "Error: EMFILE: too many open files, open" Чем это может грозить и как с этим бороться? Кто-нибудь с этим сталкивался? Это чисто-виндовая или в Линуксе тоже бывает? (мне тяжело в Линуксе проверить) Написал утилиту - "генератор картинок". В цикле генерирует 15625 картинок Не по теме: (комбинаторикой - "6 лампочек по 5 цветов в каждой" ~ 2.9Mb). Использовал canvas. Примерно это выглядит так:
причем цикл "успешно закончен" за секунду и "заканчивает запись потоков". и только потом ошибка! Если ограничиваю количество до 8000 все работает! (уточнять максимальную цифру не стал) Не по теме: ..."временно" создал их по 8000 (0...8000, 8000...16000, ...) но если все сразу пытаюсь... Планирую написать "генератор картинок" и она планируется быть ВЫСОКОНАГРУЖЕННОЙ! Картинки маленькие и могут запрашиваться тысячами - не хочу на 1001м запросе поймать ошибку! погуглил... похоже ошибка частая, а решения не нашел! вот один из примеров (у меня тоже вызывает ошибку) взял с https://github.com/nodejs/node/issues/4386
вопрос вроде решился...
0
|
27.02.2018, 17:40 | |
Ответы с готовыми решениями:
7
[ILINK32 Error] Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?) exception class edbengineerror with message too many open files [ILINK32 Error] Error: Unable to open file 'TEERESOU.RES' Linker Fatal Error: Could not open *.exe (error code 5) |
28 / 22 / 15
Регистрация: 29.11.2017
Сообщений: 75
|
|
27.02.2018, 21:33 | 2 |
Можно создавать несколько процессов с потоками.
Покопался в исходниках модуля graceful-fs, и заметил, что он при ошибке EMFILE, ставит файл в очередь и ждет, пока закроется предыдущий файл
1
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|
28.02.2018, 19:45 | 3 |
andyj, эта ошибка выскакивает, как вы уже поняли, когда открыто очень много файлов в процессе. Это ограничение установлено самой ОС.
И там и там. EMFILЕ вообще линуксовый код ошибки, но node.js использует их для "кросс-платформенности". Каждый файл после окончания работы с ним нужно закрывать.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||||||
28.02.2018, 21:26 [ТС] | 4 | |||||
Похоже они сами закрываются! Я лишь вызываю промисы/требования (еще в терминах слегка плаваю) на запись потока!
...я ожидал что они просто становятся в "очередь". А в fs они почему-то запускаются параллельно ВСЕ СРАЗУ, без учета максимально-возможного количества открытых файлов в ОС! В Win7 Вылетает на 10тыс, но работает на 8тыс.
0
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||||||
01.03.2018, 00:06 | 5 | |||||
andyj,
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
01.03.2018, 05:47 [ТС] | 6 |
...после этого мгновенно и без ошибок создал 24500 ПУСТЫХ файлов! подозреваю что поток закрывается прежде чем до него доходит очередь на запись картинки!
Пока что лучшее решение - использование var fs = require('graceful-fs'); вместо fs! Не знаете, у него есть какие-нибудь "побочные эффекты" по сравнению с "системным" fs?
0
|
1 / 1 / 2
Регистрация: 28.07.2009
Сообщений: 57
|
||||||
17.01.2019, 04:12 | 7 | |||||
Меня очень мучает эта проблема, ошибка "Error: EMFILE: too many open files, open" возникает слишком часто, хотя в моем коде происходит всего-то запись в 3 файла раз в 3 минуты.
Наибольшая проблема с записью массива userData. Если происходит ошибка, файл становится пустым. Если закрыть после неудачной записи программу, приходится восстанавливать не пустой файл из резервных. Я уже перерыл десятки тем по поиску решения этой проблемы, но так ничего и не вышло.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
||||||
17.01.2019, 11:17 [ТС] | 8 | |||||
В свое время решил эту проблему установкой пакета graceful-fs (чуть выше было решение).
0
|
17.01.2019, 11:17 | |
17.01.2019, 11:17 | |
Помогаю со студенческими работами здесь
8
Ошибка при открытии формы "the wrong parameters were passed to the converter. To convert files, open them from the file menu." error 105: file not open for output Error: Unable to open include file Error FIRST.CPP 1 11: Cannot open file: iostream.h Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |