Параллельный дочерний процесс GNU (вакуум Postgres) неожиданно завершился - PullRequest
0 голосов
/ 24 января 2019

Я запускаю parallel вот так, абстрагируясь от некоторых деталей:

generate_job_list | parallel -j10 -q bash -c 'echo -n "running {}" ; dostuff {}'

Я заметил, что иногда дочерние процессы, которые порождают parallel, умирают, получив SIGKILL (я знаю, потому что dostuff - это команда psql для запуска вакуума, и журналы Postgres сообщают мне, что команда получила SIGKILL). У меня не установлен тайм-аут, поэтому мне не ясно, что могло бы сделать что-то подобное. Это происходит после того, как дочерний процесс работал в течение нескольких часов.

Имеет ли parallel тайм-аут по умолчанию (документы, похоже, не предполагают этого) или какие-либо другие идеи о том, что может быть причиной этого?

ETA : Добавьте некоторые вещи, которые помогли мне найти это, в основной части вопроса, потому что это может помочь другим, кто испытывает ту же проблему, найти этот вопрос.

В ваших журналах Postgres вы должны найти такие сообщения:

LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
FATAL:  the database system is shutting down

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

1 Ответ

0 голосов
/ 07 февраля 2019

Итак, как упоминалось в комментариях, проблема заключалась в убийстве OOM.Я исправил это, выполнив пару вещей:

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