| Предыдущий | Следующий |
| ENOANO | EBADSLT |
ENOBUFS
Сетевые ресурсы ядра, а не обязательно память кучи процесса
ENOBUFS сообщает о нехватке ресурсов буферизации для операции с сокетом. Это отличается от сбоя выделения памяти процессом: давление может возникнуть в очередях сокетов, блоках управления протоколом, очередях интерфейсов или других ресурсах сетевого стека, даже когда приложение по-прежнему нормально выделяет память.
Ошибка также отличается от EMSGSIZE. Сообщение допустимого размера может завершиться с ENOBUFS, если стек сейчас не способен поставить его в очередь; слишком большое атомарное сообщение может получить EMSGSIZE даже при наличии достаточного количества буферов.
Что измерить до настройки
- Запишите параметры буферов сокета, заполнение очередей или счётчики сети ядра, если они доступны, скорость передачи, размеры сообщений и состояние обратного давления приложения.
- Установите, группируются ли сбои по интерфейсу, назначению, типу сокета или всплеску нагрузки, вместо глобального увеличения размеров буферов.
- Убедитесь, что производители останавливаются или сбрасывают нагрузку, когда запись не может продвигаться; неограниченная очередь в пространстве пользователя лишь переносит нехватку ресурсов на другой уровень.
Почему слепого повтора недостаточно
Повтор может завершиться успешно после снижения нагрузки, но он не объяснит, были ли данные поставлены в очередь или отброшены до ошибки. Код, учитывающий протокол, должен явно отслеживать владение сообщением и безопасность повтора.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.