Что означает код возврата ядра macOS 0x1000000D (MACH_SEND_NO_BUFFER)?

 
Предыдущий Следующий
MACH_SEND_INVALID_MEMORY MACH_SEND_TOO_LARGE

MACH_SEND_NO_BUFFER

Нехватка ресурсов IPC ядра

MACH_SEND_NO_BUFFER является результатом нехватки ресурсов: ядро не смогло выделить буфер сообщения, необходимый для начала отправки. Это отличается от переполнения очереди назначения. Проблема ёмкости очереди обычно приводит к ожиданию или MACH_SEND_TIMED_OUT, если включён тайм-аут; данный код означает, что в этот момент ядро не смогло получить внутренний ресурс IPC.

Документированная классификация отправки указывает, что при таком результате вызов ничего не выполнил. Поэтому повтор возможен, но должен быть ограничен. Плотный цикл повторов может усилить давление на память и скрыть нагрузку, которая его создала. Зафиксируйте более широкий контекст процесса и системы, прежде чем считать это единичным временным состоянием.

Практические действия

  • Применяйте увеличивающуюся задержку и ограниченное число повторов для идемпотентной работы.
  • Запишите размер сообщения, число дескрипторов, скорость производителя и одновременную нагрузку IPC.
  • Исследуйте давление на память, необычно крупные сложные сообщения и неограниченные очереди производителей.
  • Используйте сброс нагрузки или пакетную обработку на уровне приложения, когда получатель не успевает обрабатывать поток.

Ссылки


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