mirror of
https://github.com/Av0idD4rk/packmate.git
synced 2026-10-23 16:31:01 +00:00
80 lines
8.1 KiB
Markdown
80 lines
8.1 KiB
Markdown
# Проверка 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).
|