Что означает код HRESULT 0x80010101 (RPC_E_OUT_OF_RESOURCES)?

 
Предыдущий Следующий
RPC_E_SYS_CALL_FAILED RPC_E_ATTEMPTED_MULTITHREAD

RPC_E_OUT_OF_RESOURCES

Что означает RPC_E_OUT_OF_RESOURCES

RPC_E_OUT_OF_RESOURCES (0x80010101) означает, что COM/RPC не смог выделить ресурс, необходимый для обработки вызова. В документации Microsoft в качестве примеров прямо указаны память и события. Поэтому этот HRESULT в первую очередь указывает на дефицит ресурсов во время выполнения, а не на неправильный IID, регистрацию proxy/stub или формат маршалируемых параметров.

Как найти исчерпанный ресурс

  • Зафиксируйте процесс и сторону вызова, на которой впервые появился HRESULT, а также Private Bytes, Commit Size, число дескрипторов, потоков и ожидающих COM/RPC-вызовов.
  • Сравните эти показатели с успешным интервалом. Постоянный рост памяти, event/handle-объектов или числа незавершённых вызовов обычно полезнее разового снимка после отказа.
  • Проверьте утечки COM-интерфейсов и системных дескрипторов. Важно найти ресурс, который не возвращается после завершения обычной операции.
  • Если ошибка появляется только под нагрузкой, уменьшите параллелизм и проверьте, исчезает ли она без изменения данных самого COM-вызова.

Чего не стоит делать первым

Повторный вызов в плотном цикле может усугубить ситуацию, если каждый retry создаёт новую работу или новые объекты. Не начинайте также с перерегистрации COM-компонента: соседние ошибки RPC_E_NOT_REGISTERED и ошибки маршалинга описывают другие условия.

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

Повторите тот же сценарий с тем же уровнем параллелизма и наблюдайте ресурсные счётчики в течение всего теста. Исправление подтверждено, когда ресурс перестал неограниченно расти, исходный вызов стабильно проходит, а новый HRESULT не маскирует прежний дефицит.

Техническая ссылка


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