9.4. Проблемы с процессором memory_limiter #
Процессор memory_limiter ограничивает потребление памяти pgpro-otel-collector.
В качестве примера ограничим потребление памяти 2 ГиБ с возможными скачками потребления до 410 МиБ. В этом случае конфигурация будет выглядеть следующим образом:
processors:
memory_limiter/metrics:
check_interval: 1s
limit_mib: 2048
service:
pipelines:
metrics:
processors:
- memory_limiter/metrics
- batch/metrics
...Обратите внимание, что memory_limiter добавляется перед batch.
В этой конфигурации коллектор может потреблять до 20% (по умолчанию) больше памяти за счёт параметра spike_limit_mib.
Кроме того, можно использовать переменную окружения GOMEMLIMIT:
Выполните следующую команду:
sudo systemctl edit --full pgpro-otel-collector.service
В раздел
serviceдобавьте следующую строку:... Environment="GOMEMLIMIT=1600" # Обязательная строка ExecStart=/usr/bin/pgpro-otel-collector --config /etc/pgpro-otel-collector/basic.yml
Для переменной окружения
GOMEMLIMITзадаётся значение в 80% от необходимого ограничения.
Оба этих инструмента позволяют ограничить потребление памяти коллектором в критических ситуациях. Например, когда в базе данных появляется слишком много новых объектов.
Теперь рассмотрим ограничения процессора memory_limiter.
Когда достигается ограничение памяти, все новые записи о метриках сбрасываются, о чём свидетельствует следующее сообщение коллектора:
{
"level": "warn",
"ts": "2025-09-22T14:29:46.994+0300",
"msg": "Memory usage is above soft limit. Refusing data.",
"resource": {
"service.instance.id": "f3abd937-782d-4e3d-89fe-8950d54b925e",
"service.name": "pgpro-otel-collector",
"service.version": "v0.4.0"
},
"otelcol.component.kind": "processor",
"cur_mem_mib": 908
}Когда достигается жёсткий предел, в журналах коллектора появляется следующее сообщение:
{
"level": "warn",
"ts": "2025-09-22T14:29:49.970+0300",
"msg": "Memory usage is above hard limit. Forcing a GC.",
"resource": {
"service.instance.id": "f3abd937-782d-4e3d-89fe-8950d54b925e",
"service.name": "pgpro-otel-collector",
"service.version": "v0.4.0"
},
"otelcol.component.kind": "processor",
"cur_mem_mib": 1026
}После этого сообщения коллектор запускает сборку мусора. Обратите внимание на то, что дополнительные вызовы сборщика мусора означают дополнительную нагрузку на процессор.
Процессор memory_limiter не обеспечивает полного контроля над потреблением памяти. В некоторых случаях сборщик мусора может не успевать за очисткой памяти из-за высокой нагрузки на процессор.
Рекомендуется установить ограничение в 50% ресурсов сервера. Например, для 8 ГиБ ограничение будет 4 ГиБ.