Что означает код errno 12 (ENOMEM)?

 
Также может означать:
КонстантаТипОС
ERROR_INVALID_ACCESSОшибка WindowsWindows
KERN_NOT_IN_SETКод возврата ядра macOSmacOS
ippStsOverflowСтатус Intel IPPЛюбая
MAXIMUM_WAIT_OBJECTS_EXCEEDEDКод BSODWindows
Предыдущий Следующий
EAGAIN EACCES

ENOMEM

Почему это не всегда простая нехватка ОЗУ

ENOMEM сообщает, что операция не получила необходимую память или ресурс ядра. Дефицитным ресурсом может быть пользовательское адресное пространство, внутренняя память ядра, буфер канала, состояние дескриптора или другой объект конкретного API. На машине могут оставаться свободные мегабайты, но ограничение процесса, контейнера, компоновки адресного пространства или выделения в ядре всё равно блокирует запрос.

При запуске процесса код может возникнуть во время подготовки нового программного образа. В файловых и IPC-операциях он появляется при выделении внутренних буферов или метаданных. Поэтому диагностика начинается с точного системного вызова и его аргументов, а не с универсального совета «добавить память».

Как расследовать

  • Запишите операцию, размер выделения или число объектов и действующие ограничения процесса и ресурсов.
  • Одновременно проверьте давление памяти, лимиты контейнера или cgroup, предел адресного пространства и журналы ядра.
  • Ищите неограниченные очереди, утечки дескрипторов, чрезмерное наследуемое окружение и неожиданно большие буферы.
  • Завершайте работу безопасно: сохраняйте исходную ошибку, освобождайте восстанавливаемые ресурсы и не повторяйте выделение в бесконечном цикле без задержки.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.