Re: после yum update остались активны два мастер-процесса nginx

Gena Makhomed gmm на csdoc.com
Чт Мар 30 16:59:23 UTC 2017


On 30.03.2017 17:26, Konstantin Pavlov wrote:

>> в файле /var/run/nginx.pid записано 26112
>> в файле /var/run/nginx.pid.oldbin записано 603
>>
>> при обновлении nginx с версии 1.11.10 на версию 1.11.12
>> через yum update он ругнулся, что во время обновления произошла
>> ошибка и остались висеть оба мастер-процесса со своими воркерами.

> Сообщения какие-нибудь остались в терминале?

Только это: "Binary upgrade failed, please check nginx's error.log"

Но судя по pid-файлам, "Starting new master nginx" получилось сделать,
а операция "Graceful shutdown of old nginx" вообще не была выполнена.

> Что либо есть в error log'ах в эпсилон-окрестности времени обновления?

В /var/log/nginx/error.log пусто, проверка nginx -t проходит без ошибок.

> Сколько по времени занимает проверка конфигурационного файла (nginx -t)?

Около секунды, но иногда - проверка конфига занимает 6 или 11 секунд.
Наверное сказывается нагрузка на диски другими контейнерами сервера.

А насколько я понял исходники nginx - он создает pid-файл
только после успешного чтения конфигурационного файла. (!)

Причина глюка видимо в том, что за секунду ни разу не выполнилось
условие if [ -f ${oldbinpidfile} -a -f ${pidfile} ], потому что
нового ${pidfile} просто еще не было на тот момент на диске.

Может быть имеет смысл сделать UPGRADEWAITLOOPS побольше, так чтобы
максимальное время ожидания было не 1 секунда, а 30 секунд например?

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

А так как сейчас есть - получается race condition.
Собственно именно это и наблюдалось в моем случае.

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru