My Node.js script crashes because of a thrown ENOMEM (Out of memory) errnoException when using spawn.
The error:
child_process.js:935
throw errnoException(process._errno, 'spawn');
^
Error: spawn ENOMEM
at errnoException (child_process.js:988:11)
at ChildProcess.spawn (child_process.js:935:11)
at Object.exports.spawn (child_process.js:723:9)
at module.exports ([...]/node_modules/zbarimg/index.js:19:23)
I’m already using listeners for the error
and exit
event, but non of them getting fired in case of this error.
My code:
zbarimg = process.spawn('zbarimg', [photo, '-q']);
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
Full source code available.
Is there anything I can do to prevent the script from crashing? How do I catch the thrown ENOMEM error?
asked Oct 4, 2014 at 14:13
8
I had the same problem and as it turned out, my system had no swap space enabled. Check if this is the case by running the command free -m
:
vagrant@vagrant-ubuntu-trusty-64:~$ free -m
total used free shared buffers cached
Mem: 2002 233 1769 0 24 91
-/+ buffers/cache: 116 1885
Swap: 0 0 0
Looking at the bottom row we can see we have a total of 0 bytes swap memory. Not good. Node can get pretty memory hungry and if no swap space is available when memory runs out, errors are bound to happen.
The method for adding a swap file varies between operating systems and distributions, but if you’re running Ubuntu like me you can follow these instructions on adding a swap file:
sudo fallocate -l 4G /swapfile
Create a 4 gigabyte swapfilesudo chmod 600 /swapfile
Secure the swapfile by restricting access to rootsudo mkswap /swapfile
Mark the file as a swap spacesudo swapon /swapfile
Enable the swapecho "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
Persist swapfile over reboots (thanks for the tip, bman!)
answered Sep 7, 2015 at 18:58
KaivosukeltajaKaivosukeltaja
15.4k4 gold badges40 silver badges70 bronze badges
9
If you ever run into this problem in AWS Lambda, you should consider increasing the memory allocated to the function.
answered Apr 14, 2019 at 22:41
James ShapiroJames Shapiro
4,2451 gold badge30 silver badges40 bronze badges
You can try changing the amount of memory node uses with this command:
node ----max-old-space-size=1024 yourscript.js
—max-old-space-size=1024 will allocate 1 gig of memory.
By default node will use 512 mb of ram but depending on your platform you may need to allocate more or less so the garbage collection kicks in when you need it.
If your platform has less than 500 mb of ram available then try setting the memory usage lower to —max-old-space-size=256.
answered Jan 9, 2015 at 0:26
DeemoeDeemoe
93110 silver badges12 bronze badges
This solved my problem
The issue with memory
free -m
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo “/swapfile none swap sw 0 0” | sudo tee -a /etc/fstab
answered Feb 20, 2021 at 2:40
I’ve had the same problem and fixed with try / catch:
try {
zbarimg = process.spawn('zbarimg', [photo, '-q']);
} catch (err) {
console.log(err);
}
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
answered Aug 3, 2016 at 9:09
NodariusNodarius
3664 silver badges15 bronze badges
I fixed the issue by just disabling and re-enabling my Node Server.
answered Aug 7, 2020 at 19:23
Carlos GCarlos G
4311 gold badge7 silver badges18 bronze badges
Мой Node.js script сбой из-за отказа ENOMEM (Out of memory) errnoException при использовании spawn.
Ошибка:
child_process.js:935
throw errnoException(process._errno, 'spawn');
^
Error: spawn ENOMEM
at errnoException (child_process.js:988:11)
at ChildProcess.spawn (child_process.js:935:11)
at Object.exports.spawn (child_process.js:723:9)
at module.exports ([...]/node_modules/zbarimg/index.js:19:23)
Я уже использую прослушиватели для событий error
и exit
, но не их запускают в случае этой ошибки.
Мой код:
zbarimg = process.spawn('zbarimg', [photo, '-q']);
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
Полный исходный код доступен.
Есть ли что-нибудь, что я могу сделать, чтобы предотвратить сбой script? Как поймать выброшенную ошибку ENOMEM?
Спасибо!
04 окт. 2014, в 16:46
Поделиться
Источник
5 ответов
У меня была такая же проблема, и, как оказалось, в моей системе было без swap-пространства. Проверьте это, выполнив команду free -m
:
[email protected]:~$ free -m
total used free shared buffers cached
Mem: 2002 233 1769 0 24 91
-/+ buffers/cache: 116 1885
Swap: 0 0 0
Глядя на нижнюю строку, мы видим, что у нас есть общая память с 0 байтами. Нехорошо. Node может получить довольно голодную память, и если свободное пространство подкачки не будет доступно, когда закончится память, ошибки будут иметь место.
Метод добавления файла подкачки зависит от операционных систем и дистрибутивов, но если вы используете Ubuntu, как я, вы можете следовать этим инструкциям при добавлении свопа файл:
-
sudo fallocate -l 4G /swapfile
Создайте файл подкачки размером 4 гигабайта -
sudo chmod 600 /swapfile
Защитите файл подкачки, ограничив доступ к root -
sudo mkswap /swapfile
Отметить файл как пространство подкачки -
sudo swapon /swapfile
Включить обмен -
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
Персистский swap файл через перезагрузки (спасибо за подсказку, bman!)
Kaivosukeltaja
07 сен. 2015, в 20:25
Поделиться
Вы можете попробовать изменить объем памяти node, используя эту команду:
node ----max-old-space-size=1024 yourscript.js
— max-old-space-size = 1024 будет выделять 1 гигабайт памяти.
По умолчанию node будет использовать 512 МБ оперативной памяти, но в зависимости от вашей платформы вам может потребоваться выделить более или менее так, чтобы сбор мусора срабатывал, когда вам это нужно.
Если на вашей платформе имеется менее 500 мб доступного плунжера, попробуйте установить более низкое использование памяти в размере -max-old-space-size = 256.
Deemoe
09 янв. 2015, в 01:39
Поделиться
Если вы когда-нибудь сталкивались с этой проблемой в AWS Lambda, вам следует подумать об увеличении памяти, выделяемой для функции.
James Shapiro
15 апр. 2019, в 00:16
Поделиться
У меня была такая же проблема и исправлена с try/catch:
try {
zbarimg = process.spawn('zbarimg', [photo, '-q']);
} catch (err) {
console.log(err);
}
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
Nodarius
03 авг. 2016, в 10:20
Поделиться
Вы должны очистить выходы от вызываемого процесса!
Пример python выглядит следующим образом:
import sys
...
sys.stdout.flush()
Tim Long
13 нояб. 2017, в 08:02
Поделиться
Ещё вопросы
- 0Все переключается на стиль переключения
- 1Как удалить объект Java из кучи?
- 1Проверьте данные временного ряда на отсутствие значений
- 1Как создать простую программу рисования с увеличением
- 0Как поток может получить доступ к этой переменной
- 1Как мы помещаем изображение в прямоугольник на холсте
- 0Использование списка строковых элементов в качестве источника для компонента Select2
- 0как скрыть информацию о странице из всплывающего окна с подтверждением (phonegap, jquery, iPhone)
- 1.NET HttpClient подключиться к веб-службе через VPN
- 0Сообщение проверки AngularJS не отображается, когда поле является обязательным
- 0JQuery показать / скрыть Div с выпадающим больше уровней
- 0Сохранение контекста при использовании jQuery.on
- 0Попытка инициализировать карту, которая принимает объект в качестве значения в конструкторе
- 1Одновременно суммируйте два ключа в списке диктов по нескольким предметам
- 1Объекты, достижимые сильными или слабыми ссылками в Java
- 1Общий способ перезаписи одного типа поля в типе объекта потока
- 0автозаполнение, как заставить его работать
- 0по клику переключить дочерний элемент определенного класса (обработчики) — jquery
- 0Не могу получить доступ к запросу пароля из MySQL в Ubuntu
- 1Форматирование всплывающей подсказки круговой диаграммы
- 0Запрос на вставку одной записи (ID) из одной таблицы в другую таблицу
- 0Как я могу решить следующую ошибку в карме с угловым
- 0Обертка шаблонных классов с другим аргументом шаблона
- 1Несколько текстовых режимов в ASP.NET
- 1Программа закрывается при загрузке файла
- 1javafx, реализующий и показывающий ListView
- 1Создание пользовательской аннотации с использованием Spring, который поддерживает гибкую подпись метода
- 1Ошибка компилятора с массивами void [n]?
- 1Сбой сборки Android Maven с зависимостями от библиотеки R
- 1ElasticSearch с гнездом ElasticType на интерфейсе
- 1Редактировать имя тега на гистограмме
- 1Используйте OnRowClick Telerik RadGrid, а также пользовательский обработчик событий пользовательского элемента управления
- 1вставьте n в каждое пространство для нескольких строк Python
- 0jQuery addClass для 1-3 элементов
- 0LNK2019: неразрешенный внешний символ в функции
- 0Мангуст поиск данных по объекту
- 0bower.json и package.json интерполяция
- 0Codeigniter Jquery имя пользователя существует
- 1Есть ли необходимость в использовании обобщенных шаблонных шаблонов в методе сквозной передачи?
- 0получить данные xml elemnts с помощью php
- 1Исключить приложение из Launcher
- 1Проблема с не чтения конкретной информации с помощью сканера
- 1Угловые 4 * ngFor, ngx-pipe получают имя ключа верхнего уровня
- 1Преобразование XML-документа в IEnumerable
- 0Как выбрать строку с наибольшим значением в запросе с помощью SUM () и JOIN?
- 0JS-скрипт работает только тогда, когда он встроен в код scala / html
- 0Массивы не публикуются в php
- 1недопустимые символы в пути при десериализации xml?
- 0JQuery добавить — для ввода, но только добавить дважды
- 0Как установить положение центра изображения с отзывчивым в CSS?
100mbru, bitrix, CentOS, cms, drupal, joomla, LAMP, linux, mysql, nicru, Open-Source, php, Red Hat, seo, Typo3, ubuntu, win, windows, авто, администрирование, алгоритмы, алкоголь, бизнес, битрикс, видео, военмех, выборы, германия, джино, домены, интересности, исследования, картинки, кино, компьютеры, ливия, магазин, маразм, мастерхост, обработка-изображений, пейнтбол, политика, политэкономия, прикольное-видео, программирование, путешествия, работа, религия, рунет, сайтостроение, сео, сми, технологии, украина, форум, хиханьки, холивары, хостинг
- Главная
- >
- Статьи и переводы
- >
- Коды системных ошибок OS LINUX
08.11.2018
ВСЕ КОДЫ ОШИБОК ОПЕРАЦИОННОЙ СИСТЕМЫ LINUX
EPERM 1 / * Операция не допускается * /
ENOENT 2 / * Нет такого файла или каталога * /
ESRCH 3 / * Нет такого процесса * /
EINTR 4 / * * Прерванный системный вызов /
EIO 5 / * I / O * ошибка /
ENXIO 6 / * Нет такого устройства или адреса * /
E2BIG 7 / * список аргументов слишком долго * /
ENOEXEC 8 / * Exec формате ошибки * /
EBADF 9 / * Плохо * номер файла /
ECHILD 10 / * Ни один ребенок процессов * /
EAGAIN 11 / * Попробуйте еще раз * /
ENOMEM 12 / * Из памяти * /
EACCES 13 / * Доступ запрещен * /
EFAULT 14 / * Плохой адрес * /
ENOTBLK 15 / * Блок устройства требуется * /
EBUSY 16 / * Устройство или ресурс занято * /
EEXIST 17 / * Файл существует * /
EXDEV 18 / * кросс-устройства ссылка * /
ENODEV 19 / * Нет такого устройства * /
ENOTDIR 20 / * Не каталога * /
EISDIR 21 / * Есть каталог * /
EINVAL 22 / * Неправильный аргумент * /
ENFILE 23 / * файл * Переполнение таблицы /
EMFILE 24 / * Слишком много открытых файлов * /
ENOTTY 25 / * Не пишущую машинку * /
ETXTBSY 26 / * Текстовый файл занят * /
EFBIG 27 / * Файл слишком большой * /
ENOSPC 28 / * Нет места на устройстве * /
ESPIPE 29 / * Незаконное искать * /
EROFS 30 / * только для чтения * файловой системы /
EMLINK 31 / * Слишком много ссылок * /
EPIPE 32 / * * Broken трубы /
EDOM 33 / * мат аргумента из области функции * /
ERANGE 34 / * мат результат не представляется * /
Код ошибки значение Описание
0 Действие завершено успешно.
1 Действие возвращается предупреждения.
67 Произошла фатальная ошибка во время установки.
ВТОРИЧНЫЙ ФАЙЛ ОТВЕТОВ КОДЫ ОШИБОК ПРИ УСТАНОВКЕ — КОД ОШИБКИ ЗНАЧЕНИЕ — ОПИСАНИЕ
3 Путь не был найден.
5 Отказано в доступе.
10 Среду произошла ошибка.
13 Недопустимые данные.
16 Создание DAS не удалось.
17 Создания экземпляра не удалось.
18 Создание базы данных не удалось.
19 Исправить изображение пакет находится на более низком уровне, чем установленного продукта.
20 Исправить изображение пакет на том же уровне, как установленного продукта. Существует ничего, чтобы обновить.
21 Есть не DB2 (R) продуктов, установленных на выбранное место. Существует ничего, чтобы обновить.
22 Для обновления уже установлен продукт DB2, используйте installFixPack команду вместо команды db2setup.
87 Один из параметров является ошибочным.
66 Установка была отменена пользователем.
74 Данные конфигурации повреждены. Обратитесь в службу поддержки.
76 Установочными файлами для этого продукта недоступен. Убедитесь, что источник существует и доступен.
82 Другая установка уже идет. Полное, что установка, прежде чем приступить к этой установки.
86 Существовал ошибка при открытии файла журнала установки. Убедитесь, что указанное место файла журнала и, что она доступна для записи.
96 Папка Temp переполнена или недоступны. Убедитесь, что папка Temp существует и что вы можете писать на нем.
97 Этот установочный пакет не поддерживается на этой платформе.
102 Другая версия этого продукта уже установлена. Установка этой версии не может продолжаться.
103 Неверный аргумент командной строки.
143 Система не имеет достаточно свободного места, чтобы продолжить установку.
Posted: April 9, 2009 in networks, OS
Tags: linux networking, OS
ENOMEM is an OS error code , as defined in kern/include/kern/errno.h ,which is returned due to insufficient
memory. The name ENOMEM stands for Error NO MEMory. Its one of the error codes returned by the fork() call
which means no more storage space available.In connection with sockets they are raised when there isn’t enough
resources available to create a socket. The value of the error code is 12.
And also I have read that from the point of view of an application, ENOMEM is pretty diffiult to be handled constructively. One way to deal with it is to fail instantly and to release all the allocated resources as soon as possible,
avoiding operations requiring allocating new resources [Refer.].
Right now I am having this error when I try to send a large number of UDP packets to a receiver. It happens at the receiver end at a point and then there is a steep increase in the packet loss. Now I am trying to fix it and once its done I will update this post. And if someone can help me with the same, please do it by leaving a comment. And thanx in advance..
-
kbrenner
- Posts: 46
- Joined: Mon Jan 20, 2020 8:05 pm
ENOMEM error
I am using a PYBD-SF6W and am running into an error while sending BLE messages. The REPL prompt just gets flooded with the following messages:
- ENOMEM error.PNG (19.66 KiB) Viewed 4008 times
Does anyone know where these get generated? If there isn’t a way right now to avoid them, is there a way to recognize that the error is occurring and reset something to make them go away (i.e. ensure they only occur on one frame and then get back on track)? Thanks!
-
jimmo
- Posts: 2754
- Joined: Tue Aug 08, 2017 1:57 am
- Location: Sydney, Australia
- Contact:
Re: ENOMEM error
Post
by jimmo » Mon Jan 11, 2021 3:37 am
Confusingly, ENOMEM here comes from the BLE stack being unable to allocate internal buffers. It doesn’t (necessarily) mean that the Python heap ran out of memory.
Generally this shouldn’t be possible from user code (i.e. we should turn these errors into something easier to debug).
Are you able to share any more details about what your code is doing? Is it a GATT server or client? Peripheral or central? Using any more advanced features (l2cap, pairing/bonding, etc)? Can you share your code?
I did fix a bug late last year in https://github.com/micropython/micropython/pull/6717 but not sure that explains what your’e seeing.
-
jimmo
- Posts: 2754
- Joined: Tue Aug 08, 2017 1:57 am
- Location: Sydney, Australia
- Contact:
Re: ENOMEM error
Post
by jimmo » Mon Jan 11, 2021 3:39 am
Another option… are you compiling your own firmware? If so, a build with DEBUG_printf enabled (line 55 of extmod/nimble/modbluetooth_nimble.c) would probably be useful for tracking this down.
-
monquarter
- Posts: 15
- Joined: Sat Jan 11, 2020 2:31 pm
Re: ENOMEM error
Post
by monquarter » Mon Jan 11, 2021 4:50 pm
Additionally, I notice that it is not possible to configure that rxbuf parameter associated with the ble.
Code: Select all
>>>
MPY: sync filesystems
MPY: soft reboot
MicroPython v1.13-268-gf7aafc062 on 2021-01-11; PYBD-SF6W with STM32F767IIK
Type "help()" for more information.
>>> import ubluetooth
>>> ble = ubluetooth.BLE()
>>> ble.active(True)
True
>>> ble.config('rxbuf')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown config param
>>> ble.config(rxbuf=1024)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown config param
>>>
-
jimmo
- Posts: 2754
- Joined: Tue Aug 08, 2017 1:57 am
- Location: Sydney, Australia
- Contact:
Re: ENOMEM error
Post
by jimmo » Mon Jan 11, 2021 11:48 pm
monquarter wrote: ↑
Mon Jan 11, 2021 4:50 pm
Additionally, I notice that it is not possible to configure that rxbuf parameter associated with the ble.
Since v1.13 (i.e. the current unstable code) on STM32 and Unix when using the NimBLE stack, there is no longer a ringbuffer of pending events. The events get delivered directly via the scheduler.
I will update the docs.
-
monquarter
- Posts: 15
- Joined: Sat Jan 11, 2020 2:31 pm
Re: ENOMEM error
Post
by monquarter » Tue Jan 12, 2021 2:44 pm
I made a build as suggested by jimmo with debug flag enabled, and modified the ble_temperature to send data more quickly to a second pyboard-DSF6 running ble_central.py example. See viewtopic.php?f=20&t=8844 for more info on the test setup.
Code: Select all
nimble: characteristic_access_cb: conn_handle=65535 value_handle=21 op=0
nimble: gap_event_cb: type=13
nimble: gap_event_cb: notify_tx: 0 0
nimble: ble_hs_err_to_errno: 0
nimble: characteristic_access_cb: conn_handle=65535 value_handle=21 op=0
nimble: gap_event_cb: type=13
nimble: gap_event_cb: notify_tx: 0 0
nimble: ble_hs_err_to_errno: 0
nimble: gap_event_cb: type=13
nimble: gap_event_cb: notify_tx: 0 6
nimble: ble_hs_err_to_errno: 6
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ble_temperature.py", line 91, in demo
File "ble_temperature.py", line 72, in set_temperature
OSError: [Errno 12] ENOMEM