Процесс Postgres ребенок съедает много памяти

У нас есть экземпляр postgres 9.0, работающий на довольно мощной машине (96 ГБ ОЗУ /24 ядра). В последние недели у нас были сбои из-за дочерних процессов postgres, которые были убиты из-за нехватки памяти убийцей OOM. Кажется, что из-за использования пула соединений эти дочерние процессы являются долгоживущими (что имеет смысл, поскольку открытие и закрытие соединений требует времени), проблема заключается в том, что они постепенно увеличивают потребление памяти, чтобы достичь даже 9 гигабайт / процесс. Как вы можете себе представить, имея 10 из них, заполняет доступные удары баранов и убийц.

Вопросы:

  1. если мы используем параметр конфигурации по умолчанию, как процесс может выделить столько памяти?
  2. почему эти процессы не освобождают память?

Для справки, настройки, которые могут влиять на память:

max_connections = 950
shared_buffers = 32MB

Все остальные настройки не отменяются, то есть мы используем значения по умолчанию.

1 ответ

Первое, что нужно рассмотреть, это увеличить shared_buffers путь вверх, по крайней мере, до 1 ГБ и, возможно, гораздо больше, до 25% основной памяти. Вот что говорит доктор.

Только 32 МБ, из которых ~18 МБ будет использоваться только для того, чтобы справиться с max_connections до 950 дочерние процессы имеют доступ к едва достаточной общей памяти, чтобы делиться чем-либо.

Это может или не может смягчить проблему потребления памяти для вашей конкретной рабочей нагрузки и ситуации, но в любом случае это шаг в правильном направлении. Текущее значение безумно мало.

Что касается OOM, в частности, вы можете рассмотреть обходные пути, предлагаемые в разделе Linux Memory Overcommit документа. Обратите внимание, что это короткий абзац для сложной проблемы. Например, в этом посте и его комментариях с указателями есть что-то большее, чтобы понять контекст и компромиссы, связанные с ограничением или отключением OOM.

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

Другие вопросы по тегам