﻿# Ограниченный soak-тест отмен: искать утечки запросов и соединений

Ограниченный тест завершений и отмен inference-запросов: базовый уровень ресурсов, паузы восстановления, остановка и проверка подозрительного роста.

Автор: Команда Retrivium
Обновлено: 2026-11-01
Канонический URL: https://retrivium.ai/ru/journal/provider-cancel-soak-resource-leaks/
Language: ru

## Сформулировать проверяемую гипотезу

Отмена streaming-запроса может завершить чтение клиента раньше, чем движок освободит работу. Если этот путь содержит ошибку, после повторных отмен остаются активные запросы, соединения или накопленные данные. Soak-тест проверяет конкретную гипотезу о таком остаточном состоянии, а не пытается бесконечно перегружать сервер. Перед опытом фиксируют версии, модель, ограничения вывода и известные фоновые задачи. Нужен спокойный базовый интервал после прогрева: загрузка весов и первоначальное создание пулов памяти сами по себе не являются утечкой. Также записывают, какие ресурсы должны вернуться к исходному уровню, а какие могут законно сохраняться в кеше.

## Чередовать завершение и отмену

Корпус содержит короткие успешно завершённые генерации и отмены в определённых фазах: до первого содержимого и после его появления. [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) позволяет отменять fetch и потребление тела ответа, однако это не гарантирует немедленную остановку удалённого inference. Для каждой попытки сохраняют фазу отмены, подтверждённые серверные события и итоговое состояние. Циклы ограничивают общим числом запросов, временем и объёмом вывода. Не следует отправлять новый цикл, пока предыдущий уже нарушил установленный порог активной работы. Иначе диагностическая проверка превращается в неконтролируемый источник очереди и затрудняет объяснение первоначального дефекта.

## Измерять восстановление после паузы

После каждой группы запросов вводят одинаковое окно наблюдения без новой работы. Сравнивают in-flight, длину очереди, открытые соединения, память процесса и доступные метрики движка. [Документация метрик vLLM](https://docs.vllm.ai/en/stable/usage/metrics/) помогает выбрать наблюдения, но конкретные имена необходимо сверить с установленной версией. График должен показывать границы циклов и пауз. Стабильная высокая память не равна утечке: allocator может удерживать выделенные блоки. Более сильный сигнал — монотонный остаточный рост вместе с невозвращающимся числом запросов или объектов после сопоставимых фаз восстановления. Даже этот сигнал сначала требует исключить постороннюю нагрузку и ожидаемые изменения кеша.

## Разделить клиент и сервер

Рост памяти клиента может происходить из-за невычитанных chunks или накопленного диагностического журнала, а не внутри движка. [Концепции Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Concepts) объясняют очереди и backpressure; тестовый читатель должен явно завершать или отменять потребление. Сопоставляют клиентские дескрипторы с серверными записями, не предполагая, что их количество обязано совпадать из-за pooling. [Практики Prometheus](https://prometheus.io/docs/practices/instrumentation/) помогают наблюдать работу и завершения отдельно. Диагностическая развилка проста: если сервер восстановился, а тестовый процесс продолжает расти, исследуют обвязку. Если активная серверная работа остаётся после подтверждённой отмены, проверяют цепочку передачи cancellation и освобождения ресурсов.

## Сохранить границы результата

Отчёт содержит число выполненных циклов, точки отмены, интервалы восстановления, остановки и графики ресурсов с базовым уровнем. Полезны [карта мониторинга GPU](/ru/journal/gpu-monitoring-scorecard/) и [планирование inference capacity](/ru/journal/inference-capacity-planning/). Отсутствие роста в ограниченном опыте подтверждает только исследованные пути и продолжительность. Оно не исключает редкую гонку, утечку другого endpoint или накопление при иной длине контекста. Подозрение проверяют повторным контролируемым запуском и профилированием, а не бесконечным продлением теста. Обязательный предел эксперимента сохраняет воспроизводимость и позволяет объяснить, почему работа остановлена именно в выбранной точке.
