Ресурсы и лимиты trace-агента

Обновлено 15.10.2026
Параметры trace-агента ProtoOBP, ограничивающие потребление памяти и CPU, число соединений и размер запросов от трейсеров, и признаки того, что лимит достигнут.

На этой странице:

Что ограничивается

trace-агент — компонент агента ProtoOBP, который принимает трейсы от трейсеров приложений (порт 8126) и отправляет их на ProtoOBP Backend. Чтобы всплеск трафика от приложений не повлиял на хост, у trace-агента есть защитные ограничения двух видов:

  • ресурсы самого trace-агента — память и CPU;
  • приём запросов от трейсеров — число соединений, параллельный разбор, размер и время запроса.

Объём сохраняемых трейсов регулируется отдельно — сэмплированием (apm_config.target_traces_per_second, apm_config.errors_per_second), см. Управление сэмплированием трейсов.

Все параметры задаются в секции apm_config файла protoobp.yaml или переменными окружения POBP_APM_* и вступают в силу после перезапуска агента.

Память: max_memory

apm_config:
  max_memory: 1000000000   # байт; 0 — без ограничения
  • По умолчанию 500000000 (500 МБ) при установке пакетом на Linux и Windows.
  • Если trace-агент занимает в памяти больше полутора значений max_memory, он завершается с сообщением Killing process. Memory threshold exceeded в журнале trace-agent.log и перезапускается службой. Трейсы, накопленные в памяти на этот момент, теряются.
  • В контейнере (Docker, Kubernetes) ограничение по умолчанию отключено: памятью управляют лимиты контейнера. Если задать max_memory явно, оно действует и в контейнере.

Если в журнале повторяется Memory threshold exceeded, поднимите max_memory или снизьте поток трейсов сэмплированием на стороне трейсеров.

CPU: max_cpu_percent

apm_config:
  max_cpu_percent: 200   # процентов одного ядра; 0 — без ограничения
  • По умолчанию 50 при установке пакетом.
  • Значение ограничивает число ядер, на которых trace-агент одновременно выполняет работу: max_cpu_percent / 100 с округлением вниз, но не меньше одного ядра. 50 и 150 дают одно ядро, 200 — два.
  • Ограничение не применяется, если число ядер уже задано лимитами CPU контейнера или переменной окружения GOMAXPROCS.
  • В контейнере по умолчанию отключено.

Если приложения на хосте отправляют много трейсов, а trace-агент упирается в одно ядро (растёт задержка ответа трейсерам, появляются отказы в приёме), увеличьте значение до 200–400.

Соединения: connection_limit

apm_config:
  connection_limit: 2000

Сколько новых TCP-соединений trace-агент принимает за 30 секунд (по умолчанию 2000). Когда лимит исчерпан, новые соединения отклоняются до начала следующего 30-секундного периода; уже открытые соединения продолжают работать.

Лимит защищает от приложений, которые открывают новое соединение на каждый запрос. Долгоживущие приложения обычно переиспользуют соединения с агентом, и при штатной работе лимит не достигается. Если хост принимает трейсы от очень большого числа короткоживущих процессов (например, CGI или PHP без постоянного процесса), увеличьте значение.

Значение 0 отключает лимит на новые соединения; тогда действует ограничение на число одновременных соединений max_connections (по умолчанию 1000).

Параллельный разбор запросов: decoders и decoder_timeout

Принятые запросы trace-агент разбирает в нескольких параллельных обработчиках (decoders, по умолчанию — половина ядер, доступных trace-агенту с учётом max_cpu_percent, но не меньше одного). Если все обработчики заняты дольше decoder_timeout миллисекунд (по умолчанию 1000), запрос отклоняется, а трейсы из него не сохраняются.

По умолчанию трейсер получает в ответ на отклонённый запрос код 200, чтобы не повторять отправку и не усугублять перегрузку. Чтобы трейсеры получали 429 Too Many Requests и это было видно в их журналах, включите:

apm_config:
  features: ["429"]

Отклонения из-за занятости обработчиков — признак нехватки CPU: сначала увеличьте max_cpu_percent, затем при необходимости decoders.

Размер и время запроса

ПараметрПо умолчаниюНазначение
max_payload_size26214400 (25 МиБ)Максимальный размер запроса от трейсера, байт. Больший запрос отклоняется с кодом 413
receiver_timeout5Время на чтение запроса от трейсера, секунд

Запросы больше 25 МиБ обычно означают трейсы с очень большими тегами (тела запросов, SQL-тексты) — ограничьте их размер в настройках трейсера, а не поднимайте лимит.

Справочник параметров

Параметр apm_config.*Переменная окруженияПо умолчанию
max_memoryPOBP_APM_MAX_MEMORY500000000; в контейнере — без ограничения
max_cpu_percentPOBP_APM_MAX_CPU_PERCENT50; в контейнере — без ограничения
connection_limitPOBP_APM_CONNECTION_LIMIT2000 за 30 с
max_connectionsPOBP_APM_MAX_CONNECTIONS1000 (действует при connection_limit: 0)
decodersPOBP_APM_DECODERSполовина доступных ядер, не меньше 1
decoder_timeoutPOBP_APM_DECODER_TIMEOUT1000 мс
max_payload_sizePOBP_APM_MAX_PAYLOAD_SIZE26214400 байт
receiver_timeoutPOBP_APM_RECEIVER_TIMEOUT5 с
featuresPOBP_APM_FEATURES— (429 — отвечать трейсерам кодом 429 при отказе)

Признаки достижения лимитов

ПризнакЛимитЧто делать
Killing process. Memory threshold exceeded в trace-agent.log, частые перезапуски trace-агентаmax_memoryПоднять max_memory или снизить поток трейсов
Трейсы приходят с пропусками при пиковой нагрузке; при log_level: debug в журнале trace-agent is overwhelmed, a payload has been rejecteddecoders, max_cpu_percentУвеличить max_cpu_percent, затем decoders
Ошибки соединения у трейсеров на порт 8126 при большом числе короткоживущих процессовconnection_limitУвеличить connection_limit
Код 413 в журнале трейсераmax_payload_sizeОграничить размер тегов в трейсере

Состояние trace-агента видно в разделе APM Agent вывода protoobp-agent status — см. Команды и проверка работы. Если трейсы теряются, а лимиты не достигнуты, проверьте сэмплирование.