NetTraceдокументация

Пределы и производительность

Сколько памяти нужно программе, какие есть ограничения и как ускорить работу с большими захватами.

Как NetTrace обращается с памятью

Файл захвата не загружается в память. При индексировании на каждый пакет сохраняются только метаданные — где он лежит в файле, время, адреса, поток. Байты читаются с диска, когда они нужны: для видимых строк списка, выбранного пакета, фильтра по содержимому.

Что хранится Память
Пакет 64 байта
Поток Около 128 байт, для TCP ещё 136 байт итогов анализа
Узел 56 байт
Соединение Ethernet или IP 48 байт

Оценка для типичных захватов:

Захват Пакетов Память на индекс
100 МБ около 150 тысяч 10–20 МБ
1 ГБ около 1,5 миллиона 100–200 МБ
10 ГБ около 15 миллионов 1–2 ГБ

Худший случай — когда каждый пакет открывает новое соединение с нового адреса: около 0,5 КБ на пакет.

Интерфейс тоже не держит таблицы целиком: список пакетов, потоки, узлы и соединения запрашивают у движка только видимые строки.

Жёсткие пределы

Что Предел Что происходит при достижении
Пакетов в захвате Около 4,29 миллиарда Чтение останавливается, сообщение «Достигнут предел количества пакетов»
Потоков 8 миллионов Новые потоки не учитываются; пакеты в списке все
Событий временной шкалы 5 миллионов Новые события не учитываются
Длина одного пакета 256 КБ Файл считается повреждённым с этого места
Блок PCAPNG 16 МБ То же
Интерфейсов в PCAPNG 4096 То же
Длина захвата (snaplen) 262144 байта Больше задать нельзя
Условий в фильтре 4096, вложенность скобок 64 «Слишком сложный фильтр»
Точек I/O-графика 20 000 Интервал автоматически укрупняется
Содержимое потока в панели 8 МБ или 200 тысяч строк за раз Кнопка «Следующая часть»
Индикаторов одного вида 200 Показываются первые

На число узлов и соединений предела нет.

Если сработал предел потоков или событий, в строке состояния появляется предупреждение. Список пакетов при этом полный — неполной может быть только статистика.

Скорость

Измерено на тестовом захвате: 560 тысяч пакетов, 160 МБ, 40 тысяч TCP-потоков, SSD.

Операция Время Скорость
Индексирование всего файла 0,86 с Около 650 тысяч пакетов в секунду
Фильтр по быстрому полю: tcp.port == 443 0,01 с Около 50 миллионов пакетов в секунду
Фильтр с разбором пакета: dns.qry.name contains "host7" 0,59 с Около 950 тысяч пакетов в секунду
Загрузка 100 строк списка Меньше 1 мс Не зависит от размера захвата
Содержимое потока, 66 МБ 1,1 с Около 60 МБ в секунду
Сохранение потока в файл, 66 МБ 0,7 с Около 100 МБ в секунду

На вашем компьютере числа будут другими: они зависят от диска, процессора и состава трафика.

Как ускорить работу

Фильтры

Поля делятся на быстрые и медленные — см. фильтры. Быстрые проверяются по индексу, медленные требуют прочитать и разобрать каждый пакет.

Медленно Быстрее
http.host contains "example" tcp.port == 80 && http.host contains "example"
tcp.payload contains "error" tcp.stream == 8 && tcp.payload contains "error"
dns.qry.name contains "corp" dns && dns.qry.name contains "corp"

Быстрое условие через && отсекает большинство пакетов до разбора.

Диск

Байты читаются с диска постоянно, поэтому:

  • держите большие захваты на SSD, а не на сетевом диске;
  • не открывайте файл с медленного съёмного носителя — скопируйте его.

Живой захват

  • Задайте фильтр захвата: чем меньше пакетов записывается, тем меньше нагрузка.
  • Следите за счётчиком «отброшено» в строке состояния.
  • Если нужны только заголовки, уменьшите «Макс. байт с кадра».
  • На долгих захватах выключите автопрокрутку, когда не смотрите на список.

Сортировка

Сортировка по колонке на десятках миллионов пакетов занимает секунды и память под порядок строк. Сначала отфильтруйте, потом сортируйте.

Что индексирование не блокирует

Пока файл индексируется, уже можно:

  • листать список и открывать пакеты;
  • применять фильтр — он отработает по уже прочитанной части и дополнится;
  • открывать потоки, статистику и шкалу — они показывают то, что уже посчитано.

Недоступно до конца индексирования только сохранение в файл.