packmate/docs/MCP_TEST_RESULTS.md
2026-10-23 11:42:44 +03:00

80 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Проверка 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).