8.1 KiB
Проверка MCP и устойчивости Packmate — 23 октября 2026
Все перечисленные проверки завершились успешно. Команды повторного запуска находятся в 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.