Решение проблем, связанных с памятью [Документация VAS Experts]

Решение проблем, связанных с памятью

Внимание! Не изменяйте данные параметры самостоятельно. Обратитесь для этого в техническую поддержку.

mem_tracking_flow

mem_tracking_flow — объем памяти для обработки IPv4 flow, который аллоцируется при старте СКАТ.

Каждый обрабатываемый flow будет размещен в этой памяти и будет обработан в соответствии с определёнными в конфигурации политиками и правилами. Заполненность этого пула можно отслеживать в /var/log/dpi/fastdpi_stat.log (как описано здесь). Если пул будет исчерпан, то СКАТ уже не сможет обрабатывать новые flow.

mem_preset

mem_preset — способ инициализации памяти в DPI.

DPI выделяет память статически: при старте процесса и в момент создания некоторых профилей услуг (таких как NAT, черные и белые списки), в процессе работы дополнительная память не выделяется. Потребление памяти растет, так как ОС Linux различает резидентную (обозначена в top как RES) и виртуальную (обозначена в top как VIRT) память процесса, особенность в том, что пока память не инициализирована (фактически инициализирована нулем), то она не записывается Linux в резидентную и перемещается туда по мере ее инициализации.

Настройка mem_preset=1 в файле /etc/dpi/fastdpi.conf позволяет DPI инициализировать почти всю выделенную память при старте процесса. Это предотвращает рост резидентной памяти (RES) в процессе работы, так как память сразу полностью инициализируется. Однако, этот режим замедляет старт системы и требует достаточного объема физической оперативной памяти. Рекомендуется учитывать этот фактор и следить за расходом виртуальной (VIRT) и резидентной (RES) памяти.

mem_ssl_parsers

mem_ssl_parsers — объем памяти для обработки SSL, который аллоцируется при старте СКАТ.

Явным признаком того, что текущего размера пула не хватает — наличие в /var/log/dpi/fastdpi_slave_*.log ошибок вида:

[ERROR   ][000000118902699100][042E5F001EF5C480] Can't allocate record
ssl_state : IP : <IP:port> --> <IP:port>
[ERROR   ][000000118902954180][042E5F001EF5C50B] Can't allocate record
ssl_state_sni : IP : <IP:port> --> <IP:port>

Нехватка парсеров для SSL может привести к тому, что будет страдать обработка HTTPS трафика (может влиять на фильтрацию по спискам РКН).
При появлении подобных ошибок рекомендуется увеличивать значение mem_ssl_parsers в 1,5 - 2 раза (стоит учитывать объем свободной RAM).

mem_ssl_savebl

mem_ssl_savebl (холодный) — задает количество сохраняемых буферов для разбора ssl при перемешивании пакетов.
По умолчанию = 10% от mem_ssl_parsers. Если значение = 0 — сохранение и обработка не происходит.
Первое значение — из conf, в скобках — то что используется.

Пример вывода из alert:

  1. Параметр не задан
        mem_ssl_parsers              : 320000
        mem_ssl_savebl               : -1 (32000)
  2. Задан mem_ssl_savebl=1234
        mem_ssl_parsers              : 320000
        mem_ssl_savebl               : 1234 (1234)

Cтатистика утилизации сохранения буферов парсинга ssl запросов

    [STAT    ][2024/08/19-17:26:05:599912] Detailed statistics on SSL_SAVEBL :
             thread_slave= 0 : 1522/1/32000 0/0/0/0/0/ 6/6/2561 426/348/556 1/1/32000
             Total : 1522/1/32000 0/0/0/0/0/ 6/6/2561 426/348/556 1/1/32000

Обозначим: a1/a2/a3 b1/b2/b3/b4/b5 c1/c2/c3 d1/d2/d3 e1/e2/e3

a1 — размер выделяемой памяти для сохранения записи последующего разбора (совпадает с snaplen)
a2 — выделено записей
a3 — использовано записей

b1 — суммарное количество ошибок при обоработке сохранения пакетов
b2 — прочитанный размер буфера очень большой
b3 — в функцию передан некорректный isbl_t ind_
b4 — ошибка добавления запис в arw — нет места для сохранения списка используемых буферов
b5 — ошибка добавления данных в p_data (не можем сохранить буфер)

c1 — количество запросов на сохранение данных
c2 — освобождено сохраненных пакетов
c3 — суммарный размер пакетов, которые были сохранены

d1 — средний размер сохраненного TCP пакета
d2 — min размер сохраненного TCP пакета
d3 — max размер сохраненного TCP пакета

e1 — использвоано записей в очереди arw
e2 — свободно записей (могут быть повторно использовано)
e3 — выделено записей в очереди

mem_quic_ietf_savebl

mem_quic_ietf_savebl — задает количество буферов для разбора quic_ietf-запросов, которые состоят из нескольких пакетов. Значение по умолчанию = 15% от mem_ssl_parsers.