# Проверка MCP и устойчивости Packmate — 23 октября 2026 Все перечисленные проверки завершились успешно. Команды повторного запуска находятся в [MCP.md](MCP.md). Стенд: Docker Desktop 29.3.1, Linux VM с 16 доступными CPU и 6,61 GiB RAM, PostgreSQL 15.2, Java 17, Python 3.12. Сетевые профили используют настоящий TCP echo, 8 обработчиков захвата, Java heap до 2 GiB и очередь 250000 пакетов. MCP ограничен одним CPU и 512 MiB RAM. | Проверка | Результат | | --- | --- | | Полный Java-набор | 54 теста; 0 ошибок, провалов и пропусков | | Python MCP | 13 тестов; все прошли | | Стресс клинера PostgreSQL | Удалены 29701 стрим и 916000 пакетов; параллельно записаны 9332 стрима; p99 записи 20,44 мс | | Интеграция реального MCP SDK | 200 исходных + 3000 новых TCP-потоков; WebSocket UI, IP regex, Lookback, избранное и очистка; 0 потерь | | Увеличенный сетевой профиль | 2000 исходных + 50000 новых TCP-потоков; 1 272 504 захваченных пакета; 0 потерь; перезапуск MCP во время нагрузки | | Длительный сетевой профиль | 35 минут 5 секунд; 102000 TCP-потоков; 2 448 029 захваченных пакетов; 0 потерь | | Production Compose | `docker compose up --build -d`; веб-интерфейс, 22 MCP-инструмента и изменения общих сервисов/паттернов работают; выключенный MCP не мешает веб-интерфейсу | ## Что сверялось в сетевых профилях У каждого соединения проверялись полные хеши входящего и исходящего содержимого, уникальный идентификатор, направление IP, размер и количество сохранённых сообщений, а также наличие live-паттерна. На соединение передавалось 8 сообщений по 1024 байта с четырёхбайтовым заголовком длины; echo возвращал те же байты. В увеличенном профиле генератор передал 50000 соединений за 149,885 секунды (333,589 соединения/с); заданные 120 секунд были минимальной длительностью, а не достигнутым временем. Содержимое всех 50000 соединений совпало. REST p99 — 478,908 мс. Во время этого прогона на том же Docker-хосте также собирался production-образ. Профиль проверял BUSY при двух активных заданиях, отмену, отдельное достижение лимитов времени и байт, продолжение по курсору, чтение 96 KiB бинарного сообщения, пропуск его при контентном поиске, идемпотентный Lookback с лимитом 256 подсветок, изменение/удаление сервисов и паттернов и live-подсветку IP в обычном API интерфейса. Бюджеты MCP в этом профиле: 10 секунд / 2 MiB. ## Длительный профиль с естественным retention Использовались retention 15 минут, интервал очистки 10 секунд, commit grace 120 секунд, обычные лимиты MCP 30 секунд / 32 MiB и настройки autovacuum из production Compose. Время записей не изменялось. Нагрузка: пачки по 500 соединений за 10 секунд с проверкой содержимого после каждой пачки; одновременно выполнялись MCP regex-задания. - Проверены все 102000 соединений; выполнены 72 задания MCP. Ограниченные по времени задания корректно возвращали частичное покрытие и курсор продолжения. - Естественно удалены 58300 старых стримов; в момент итоговой сверки осталось 43700. - Сохранены все 204 избранных стрима. Потерянных ссылок packet/stream и found_pattern/packet нет. - Потери kernel/interface/application: 0/0/0. Максимальная очередь: 130 из 250000 пакетов. - REST p99 за весь прогон — 70,042 мс; первые пять минут — 74,191 мс, последние — 68,1 мс. - После начала очистки число текущих стримов держалось около 44000. Физический размер БД в последнем замере — 946238255 байт, около 902 MiB. - Максимумы памяти по периодическим замерам Docker: Packmate 816,2 MiB, MCP 46,27 MiB, PostgreSQL около 1205 MiB. Перезапусков и OOM нет. ## Исправления, проверенные при подготовке Жизненный цикл общего HTTP-клиента и заданий MCP привязан к приложению, а не к отдельному stateless-запросу. Инструменты публикуют structured output. Старые literal-паттерны получают ограничение подсветок при MCP Lookback. Валидация regex проверяет также Java RE2J. После прерванной записи Lookback курсор возвращается перед неподтверждённой страницей. SQL-пагинация ограничивает индексный проход по стримам: продолжение больше не просматривает все предыдущие стримы перед выдачей следующей страницы. Контроль продолжения после 12000 стримов через реальный MCP вернул 20 результатов за 271,814 мс с корректным порядком курсора. PostgreSQL-тест отдельно проверяет продолжение внутри стрима и между стримами с одинаковым временем начала. ## Артефакты и границы проверки Локальные результаты находятся в `build/reports/mcp/`: `java-tests.json`, `integration.json`, `capacity.json`, `soak.json`, `soak-samples.json`, `soak-loads.json`, `soak-memory.json`, `soak-container-status.txt`, `deployment.json`, `deep-cursor.json` и хеши проверенных исходников в `tested-source-sha256.json`. Стресс клинера: `build/reports/cleanup-stress.json`. Артефакты в `build/` не включаются в Git. Тестовые контейнеры и сетевые БД удалены после проверки. Это результаты конкретного стенда и профилей: производительность зависит от CPU, диска, размеров сообщений, декодеров и паттернов. Старый полный профиль на 250000 соединений не повторялся. Ограничения текущих 22 MCP-инструментов, включая частичный поиск, лимит сообщения и потерю временных заданий при перезапуске, описаны в [MCP.md](MCP.md).