<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – лимиты</title><link>/docs/tags/%D0%BB%D0%B8%D0%BC%D0%B8%D1%82%D1%8B/</link><description>Recent content in лимиты on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/%D0%BB%D0%B8%D0%BC%D0%B8%D1%82%D1%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Instrumentation: Ресурсы и лимиты trace-агента</title><link>/docs/instrumentation/tracing/agent-limits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/instrumentation/tracing/agent-limits/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d1%82%d1%81%d1%8f">Что ограничивается&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d1%8c-max_memory">Память: max_memory&lt;/a>&lt;/li>
&lt;li>&lt;a href="#cpu-max_cpu_percent">CPU: max_cpu_percent&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%be%d0%b5%d0%b4%d0%b8%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f-connection_limit">Соединения: connection_limit&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b0%d1%80%d0%b0%d0%bb%d0%bb%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d1%80%d0%b0%d0%b7%d0%b1%d0%be%d1%80-%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81%d0%be%d0%b2-decoders-%d0%b8-decoder_timeout">Параллельный разбор запросов: decoders и decoder_timeout&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%80%d0%b0%d0%b7%d0%bc%d0%b5%d1%80-%d0%b8-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f-%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81%d0%b0">Размер и время запроса&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%bf%d1%80%d0%b0%d0%b2%d0%be%d1%87%d0%bd%d0%b8%d0%ba-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d0%be%d0%b2">Справочник параметров&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%b7%d0%bd%d0%b0%d0%ba%d0%b8-%d0%b4%d0%be%d1%81%d1%82%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%bb%d0%b8%d0%bc%d0%b8%d1%82%d0%be%d0%b2">Признаки достижения лимитов&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="что-ограничивается">Что ограничивается&lt;/h2>
&lt;p>trace-агент — компонент агента ProtoOBP, который принимает трейсы от трейсеров приложений (порт &lt;code>8126&lt;/code>) и отправляет их на ProtoOBP Backend. Чтобы всплеск трафика от приложений не повлиял на хост, у trace-агента есть защитные ограничения двух видов:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>ресурсы&lt;/strong> самого trace-агента — память и CPU;&lt;/li>
&lt;li>&lt;strong>приём&lt;/strong> запросов от трейсеров — число соединений, параллельный разбор, размер и время запроса.&lt;/li>
&lt;/ul>
&lt;p>Объём сохраняемых трейсов регулируется отдельно — сэмплированием (&lt;code>apm_config.target_traces_per_second&lt;/code>, &lt;code>apm_config.errors_per_second&lt;/code>), см. &lt;a href="../sampling/#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82">Управление сэмплированием трейсов&lt;/a>.&lt;/p>
&lt;p>Все параметры задаются в секции &lt;code>apm_config&lt;/code> файла &lt;code>protoobp.yaml&lt;/code> или переменными окружения &lt;code>POBP_APM_*&lt;/code> и вступают в силу после перезапуска агента.&lt;/p>
&lt;h2 id="память-max_memory">Память: max_memory&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apm_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">max_memory&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1000000000&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># байт; 0 — без ограничения&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>По умолчанию &lt;code>500000000&lt;/code> (500 МБ) при установке пакетом на Linux и Windows.&lt;/li>
&lt;li>Если trace-агент занимает в памяти больше &lt;strong>полутора&lt;/strong> значений &lt;code>max_memory&lt;/code>, он завершается с сообщением &lt;code>Killing process. Memory threshold exceeded&lt;/code> в &lt;a href="../../../setup/agent/logs/">журнале&lt;/a> &lt;code>trace-agent.log&lt;/code> и перезапускается службой. Трейсы, накопленные в памяти на этот момент, теряются.&lt;/li>
&lt;li>&lt;strong>В контейнере&lt;/strong> (Docker, Kubernetes) ограничение по умолчанию отключено: памятью управляют лимиты контейнера. Если задать &lt;code>max_memory&lt;/code> явно, оно действует и в контейнере.&lt;/li>
&lt;/ul>
&lt;p>Если в журнале повторяется &lt;code>Memory threshold exceeded&lt;/code>, поднимите &lt;code>max_memory&lt;/code> или снизьте поток трейсов &lt;a href="../sampling/">сэмплированием&lt;/a> на стороне трейсеров.&lt;/p>
&lt;h2 id="cpu-max_cpu_percent">CPU: max_cpu_percent&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apm_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">max_cpu_percent&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">200&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># процентов одного ядра; 0 — без ограничения&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>По умолчанию &lt;code>50&lt;/code> при установке пакетом.&lt;/li>
&lt;li>Значение ограничивает число ядер, на которых trace-агент одновременно выполняет работу: &lt;code>max_cpu_percent / 100&lt;/code> с округлением вниз, но не меньше одного ядра. &lt;code>50&lt;/code> и &lt;code>150&lt;/code> дают одно ядро, &lt;code>200&lt;/code> — два.&lt;/li>
&lt;li>Ограничение не применяется, если число ядер уже задано лимитами CPU контейнера или переменной окружения &lt;code>GOMAXPROCS&lt;/code>.&lt;/li>
&lt;li>&lt;strong>В контейнере&lt;/strong> по умолчанию отключено.&lt;/li>
&lt;/ul>
&lt;p>Если приложения на хосте отправляют много трейсов, а trace-агент упирается в одно ядро (растёт задержка ответа трейсерам, появляются &lt;a href="#%d0%bf%d1%80%d0%b8%d0%b7%d0%bd%d0%b0%d0%ba%d0%b8-%d0%b4%d0%be%d1%81%d1%82%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%bb%d0%b8%d0%bc%d0%b8%d1%82%d0%be%d0%b2">отказы в приёме&lt;/a>), увеличьте значение до &lt;code>200&lt;/code>–&lt;code>400&lt;/code>.&lt;/p>
&lt;h2 id="соединения-connection_limit">Соединения: connection_limit&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apm_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">connection_limit&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2000&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Сколько &lt;strong>новых&lt;/strong> TCP-соединений trace-агент принимает за 30 секунд (по умолчанию &lt;code>2000&lt;/code>). Когда лимит исчерпан, новые соединения отклоняются до начала следующего 30-секундного периода; уже открытые соединения продолжают работать.&lt;/p>
&lt;p>Лимит защищает от приложений, которые открывают новое соединение на каждый запрос. Долгоживущие приложения обычно переиспользуют соединения с агентом, и при штатной работе лимит не достигается. Если хост принимает трейсы от очень большого числа короткоживущих процессов (например, CGI или PHP без постоянного процесса), увеличьте значение.&lt;/p>
&lt;p>Значение &lt;code>0&lt;/code> отключает лимит на новые соединения; тогда действует ограничение на число &lt;strong>одновременных&lt;/strong> соединений &lt;code>max_connections&lt;/code> (по умолчанию &lt;code>1000&lt;/code>).&lt;/p>
&lt;h2 id="параллельный-разбор-запросов-decoders-и-decoder_timeout">Параллельный разбор запросов: decoders и decoder_timeout&lt;/h2>
&lt;p>Принятые запросы trace-агент разбирает в нескольких параллельных обработчиках (&lt;code>decoders&lt;/code>, по умолчанию — половина ядер, доступных trace-агенту с учётом &lt;code>max_cpu_percent&lt;/code>, но не меньше одного). Если все обработчики заняты дольше &lt;code>decoder_timeout&lt;/code> миллисекунд (по умолчанию &lt;code>1000&lt;/code>), запрос отклоняется, а трейсы из него не сохраняются.&lt;/p>
&lt;p>По умолчанию трейсер получает в ответ на отклонённый запрос код &lt;code>200&lt;/code>, чтобы не повторять отправку и не усугублять перегрузку. Чтобы трейсеры получали &lt;code>429 Too Many Requests&lt;/code> и это было видно в их журналах, включите:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apm_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">features&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;429&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Отклонения из-за занятости обработчиков — признак нехватки CPU: сначала увеличьте &lt;a href="#cpu-max_cpu_percent">&lt;code>max_cpu_percent&lt;/code>&lt;/a>, затем при необходимости &lt;code>decoders&lt;/code>.&lt;/p>
&lt;h2 id="размер-и-время-запроса">Размер и время запроса&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Параметр&lt;/th>
&lt;th style="text-align:left">По умолчанию&lt;/th>
&lt;th style="text-align:left">Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>max_payload_size&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>26214400&lt;/code> (25 МиБ)&lt;/td>
&lt;td style="text-align:left">Максимальный размер запроса от трейсера, байт. Больший запрос отклоняется с кодом &lt;code>413&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>receiver_timeout&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>5&lt;/code>&lt;/td>
&lt;td style="text-align:left">Время на чтение запроса от трейсера, секунд&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Запросы больше 25 МиБ обычно означают трейсы с очень большими тегами (тела запросов, SQL-тексты) — ограничьте их размер в настройках трейсера, а не поднимайте лимит.&lt;/p>
&lt;h2 id="справочник-параметров">Справочник параметров&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Параметр &lt;code>apm_config.*&lt;/code>&lt;/th>
&lt;th style="text-align:left">Переменная окружения&lt;/th>
&lt;th style="text-align:left">По умолчанию&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>max_memory&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_MAX_MEMORY&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>500000000&lt;/code>; в контейнере — без ограничения&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>max_cpu_percent&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_MAX_CPU_PERCENT&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>50&lt;/code>; в контейнере — без ограничения&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>connection_limit&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_CONNECTION_LIMIT&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>2000&lt;/code> за 30 с&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>max_connections&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_MAX_CONNECTIONS&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>1000&lt;/code> (действует при &lt;code>connection_limit: 0&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>decoders&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_DECODERS&lt;/code>&lt;/td>
&lt;td style="text-align:left">половина доступных ядер, не меньше 1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>decoder_timeout&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_DECODER_TIMEOUT&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>1000&lt;/code> мс&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>max_payload_size&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_MAX_PAYLOAD_SIZE&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>26214400&lt;/code> байт&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>receiver_timeout&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_RECEIVER_TIMEOUT&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>5&lt;/code> с&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>features&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>POBP_APM_FEATURES&lt;/code>&lt;/td>
&lt;td style="text-align:left">— (&lt;code>429&lt;/code> — отвечать трейсерам кодом 429 при отказе)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="признаки-достижения-лимитов">Признаки достижения лимитов&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Признак&lt;/th>
&lt;th style="text-align:left">Лимит&lt;/th>
&lt;th style="text-align:left">Что делать&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>Killing process. Memory threshold exceeded&lt;/code> в &lt;code>trace-agent.log&lt;/code>, частые перезапуски trace-агента&lt;/td>
&lt;td style="text-align:left">&lt;code>max_memory&lt;/code>&lt;/td>
&lt;td style="text-align:left">Поднять &lt;code>max_memory&lt;/code> или снизить поток трейсов&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Трейсы приходят с пропусками при пиковой нагрузке; при &lt;code>log_level: debug&lt;/code> в журнале &lt;code>trace-agent is overwhelmed, a payload has been rejected&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>decoders&lt;/code>, &lt;code>max_cpu_percent&lt;/code>&lt;/td>
&lt;td style="text-align:left">Увеличить &lt;code>max_cpu_percent&lt;/code>, затем &lt;code>decoders&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Ошибки соединения у трейсеров на порт &lt;code>8126&lt;/code> при большом числе короткоживущих процессов&lt;/td>
&lt;td style="text-align:left">&lt;code>connection_limit&lt;/code>&lt;/td>
&lt;td style="text-align:left">Увеличить &lt;code>connection_limit&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Код &lt;code>413&lt;/code> в журнале трейсера&lt;/td>
&lt;td style="text-align:left">&lt;code>max_payload_size&lt;/code>&lt;/td>
&lt;td style="text-align:left">Ограничить размер тегов в трейсере&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Состояние trace-агента видно в разделе &lt;code>APM Agent&lt;/code> вывода &lt;code>protoobp-agent status&lt;/code> — см. &lt;a href="../../../setup/agent/commands/#%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b0">Команды и проверка работы&lt;/a>. Если трейсы теряются, а лимиты не достигнуты, проверьте &lt;a href="../sampling/#%d1%87%d0%b0%d1%81%d1%82%d1%8b%d0%b5-%d0%bf%d1%80%d0%b8%d1%87%d0%b8%d0%bd%d1%8b-%d0%bf%d0%be%d1%82%d0%b5%d1%80%d0%b8-%d1%81%d0%bf%d0%b0%d0%bd%d0%be%d0%b2">сэмплирование&lt;/a>.&lt;/p></description></item></channel></rss>