| Предыдущий | Следующий |
| 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 не маскирует прежний дефицит.
Техническая ссылка
Нужно найти другой код? Найти другой код состояния или ошибки.
