Re: после yum update остались активны два мастер-процесса nginx
> Для systemd-based исправим, чтобы тоже можно было переопределить аналогичным > образом. В systemd же вполне работает systemctl edit svcname. И так администратор может добавить Environment=VAR=VALUE... > Спасибо! ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: после yum update остались активны два мастер-процесса nginx
On 30.03.2017 22:07, Konstantin Pavlov wrote: Сколько по времени занимает проверка конфигурационного файла (nginx -t)? Около секунды, но иногда - проверка конфига занимает 6 или 11 секунд. Наверное сказывается нагрузка на диски другими контейнерами сервера. А насколько я понял исходники nginx - он создает pid-файл только после успешного чтения конфигурационного файла. (!) Причина глюка видимо в том, что за секунду ни разу не выполнилось условие if [ -f ${oldbinpidfile} -a -f ${pidfile} ], потому что нового ${pidfile} просто еще не было на тот момент на диске. Да, именно поэтому я и спросил про время. Может быть имеет смысл сделать UPGRADEWAITLOOPS побольше, так чтобы максимальное время ожидания было не 1 секунда, а 30 секунд например? Это будет очень актуально для конфигураций с большим количеством включаемых файлов на серверах с нагруженной дисковой подсистемой. А так как сейчас есть - получается race condition. Собственно именно это и наблюдалось в моем случае. Мы посчитали, что секунды по-умолчанию должно быть достаточно для всех =) Как мне кажется, задержка в 1 секунду пошла из Makefile, который генерируется командой ./configure из состава nginx: upgrade: /usr/local/nginx/sbin/nginx -t kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` sleep 1 test -f /usr/local/nginx/logs/nginx.pid.oldbin kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` Но тут никто не ждет появления pid-файла от нового мастера, одна секунда дается старому мастеру на то чтобы получить сигнал, переименовать nginx.pid в nginx.pid.oldbin и запустить новый мастер (без лимита времени на старт) В скрипте /usr/libexec/initscripts/legacy-actions/nginx/upgrade логика теперь уже совсем другая, там ожидается что за 1 секунду новый мастер успеет прочитать конфиг и записать свой pid-файл. Когда включается много мелких конфигурационных файлов в основной конфиг и когда дисковая подсистема сервера загружена - легко может получиться и 11 секунд и даже больше. Можно ли увеличить значение по-умолчанию переменной UPGRADEWAITLOOPS до UPGRADEWAITLOOPS=450 ? Это вполне безопасно и не будет приводить к каким-либо проблемам. В том же systemd значением по-умолчанию для TimeoutStartSec= и TimeoutStopSec= является 90 секунд и это не вызывает никаких проблем. Тут у нас, по сути, счетчик UPGRADEWAITLOOPS играет роль TimeoutStartSec В инит-скрипте для centos/rhel 5-6 используется вот такое для переопределения администраторами: 30 sysconfig=`/bin/basename $initscript` 31 32 if [ -f /etc/sysconfig/$sysconfig ]; then 33 . /etc/sysconfig/$sysconfig 34 fi ... 42 UPGRADEWAITLOOPS=${UPGRADEWAITLOOPS-5} 43 CHECKSLEEP=${CHECKSLEEP-3} Соответственно администратор может переназначить значения переменных так, как подходит для его системы. Для systemd-based исправим, чтобы тоже можно было переопределить аналогичным образом. Только сделайте, пожалуйста, значение по-умолчанию UPGRADEWAITLOOPS=450 И тогда очень мало кому понадобится менять новое дефолтовое значение UPGRADEWAITLOOPS=450 на какое-то другое, 99.99% пользователей вполне устроит то, как будет работать новый service nginx upgrade -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: после yum update остались активны два мастер-процесса nginx
On 30/03/2017 19:59, Gena Makhomed wrote: > 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. > Собственно именно это и наблюдалось в моем случае. Мы посчитали, что секунды по-умолчанию должно быть достаточно для всех =) В инит-скрипте для centos/rhel 5-6 используется вот такое для переопределения администраторами: 30 sysconfig=`/bin/basename $initscript` 31 32 if [ -f /etc/sysconfig/$sysconfig ]; then 33 . /etc/sysconfig/$sysconfig 34 fi ... 42 UPGRADEWAITLOOPS=${UPGRADEWAITLOOPS-5} 43 CHECKSLEEP=${CHECKSLEEP-3} Соответственно администратор может переназначить значения переменных так, как подходит для его системы. Для systemd-based исправим, чтобы тоже можно было переопределить аналогичным образом. Спасибо! -- Konstantin Pavlov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: после yum update остались активны два мастер-процесса nginx
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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: после yum update остались активны два мастер-процесса nginx
Hello! On Thu, Mar 30, 2017 at 05:26:11PM +0300, Konstantin Pavlov wrote: [...] > > в конфиге nginx прописано worker_processes 8; > > у старого мастера их почему-то было в два раза больше запущено. > > У старого мастера могли быть reload'ы и долгоиграющие > соединения, что может обьяснять количество воркеров. При релоаде заголовок процесса меняется на "worker process is shutting down", тут же у всех "worker process". -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Cache TTL = 0
Проще всего сделать как в Amazon CloudFront, если бекенд отдал Cache-Control: max-age=0, кешировать эти ответы, если в заголовках ответа есть валидаторы ETag или Last-Modified. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,273298,273299#msg-273299 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: после yum update остались активны два мастер-процесса nginx
On 30/03/2017 09:33, Gena Makhomed wrote: > Здравствуйте! > > в файле /var/run/nginx.pid записано 26112 > в файле /var/run/nginx.pid.oldbin записано 603 > > при обновлении nginx с версии 1.11.10 на версию 1.11.12 > через yum update он ругнулся, что во время обновления произошла > ошибка и остались висеть оба мастер-процесса со своими воркерами. > > официальная сборка из репозитория nginx.org mainline для centos 7. > > в sysctl.conf сервера прописано net.ipv4.ip_nonlocal_bind=1 > и эта CentOS 7 - контейнер на OpenVZ 2.6.32-042stab120.18 > если это может быть важно. Сообщения какие-нибудь остались в терминале? Что либо есть в error log'ах в эпсилон-окрестности времени обновления? Сколько по времени занимает проверка конфигурационного файла (nginx -t)? Была ли высокая нагрузка на диски в момент обновления? > ожидалось что после yum update останется только один мастер nginx. > и только его воркер-процессы. > > в конфиге nginx прописано worker_processes 8; > у старого мастера их почему-то было в два раза больше запущено. У старого мастера могли быть reload'ы и долгоиграющие соединения, что может обьяснять количество воркеров. > # pstree -cp > systemd(1)─┬─nginx(603)─┬─nginx(26112)─┬─nginx(26826) >││ ├─nginx(26827) >││ ├─nginx(26828) >││ ├─nginx(26829) >││ ├─nginx(26830) >││ ├─nginx(26831) >││ ├─nginx(26832) >││ └─nginx(26833) >│├─nginx(25993) >│├─nginx(25994) >│├─nginx(25995) >│├─nginx(25996) >│├─nginx(25997) >│├─nginx(25998) >│├─nginx(25999) >│├─nginx(26000) >│├─nginx(26160) >│├─nginx(26161) >│├─nginx(26162) >│├─nginx(26163) >│├─nginx(26164) >│├─nginx(26165) >│├─nginx(26166) >│└─nginx(26167) > > > # ps aux | grep nginx > USER PID %CPU %MEMVSZ RSS TTY STAT START TIME COMMAND > root 603 0.0 3.5 143696 73680 ?Ss Mar05 0:10 nginx: > master process /usr/sbin/nginx -c /etc/nginx/nginx.conf > nginx25993 0.0 3.9 152352 82552 ?S< Mar29 0:02 nginx: > worker process > nginx25994 0.0 3.9 152352 82580 ?S< Mar29 0:02 nginx: > worker process > nginx25995 0.0 3.9 152352 82556 ?S< Mar29 0:02 nginx: > worker process > nginx25996 0.0 3.9 152352 82580 ?S< Mar29 0:02 nginx: > worker process > nginx25997 0.0 3.9 152352 82604 ?S< Mar29 0:03 nginx: > worker process > nginx25998 0.0 3.9 152352 82588 ?S< Mar29 0:04 nginx: > worker process > nginx25999 0.0 3.9 152352 82588 ?S< Mar29 0:04 nginx: > worker process > nginx26000 0.0 3.9 152352 82640 ?S< Mar29 0:05 nginx: > worker process > root 26112 0.0 3.7 145824 77672 ?SMar29 0:01 nginx: > master process /usr/sbin/nginx -c /etc/nginx/nginx.conf > nginx26160 0.0 3.9 152352 82632 ?S< Mar29 0:05 nginx: > worker process > nginx26161 0.0 3.9 152352 82620 ?S< Mar29 0:06 nginx: > worker process > nginx26162 0.0 3.9 152352 82632 ?S< Mar29 0:08 nginx: > worker process > nginx26163 0.0 3.9 152352 82652 ?S< Mar29 0:09 nginx: > worker process > nginx26164 0.0 3.9 152352 82652 ?S< Mar29 0:10 nginx: > worker process > nginx26165 0.0 3.9 152352 82660 ?S< Mar29 0:12 nginx: > worker process > nginx26166 0.0 3.9 152352 82648 ?S< Mar29 0:14 nginx: > worker process > nginx26167 0.0 3.9 152352 82672 ?S< Mar29 0:16 nginx: > worker process > nginx26826 0.0 3.6 145828 76444 ?S< 05:00 0:05 nginx: > worker process > nginx26827 0.0 3.6 145828 76456 ?S< 05:00 0:06 nginx: > worker process > nginx26828 0.0 3.6 145828 76456 ?S< 05:00 0:07 nginx: > worker process > nginx26829 0.0 3.6 145828 76488 ?S< 05:00 0:12 nginx: > worker process > nginx26830 0.0 3.6 145828 76464 ?S< 05:00 0:09 nginx: > worker process > nginx26831 0.1 3.6 145828 76468 ?S< 05:00 0:17 nginx: > worker process > nginx26832 0.1 3.6 145828 76488 ?S< 05:00 0:26 nginx: > worker process > nginx26833 0.1 3.6 145828 76488 ?S< 05:00 0:21 nginx: > worker process > -- Konstantin Pavlov ___ nginx-ru mailing list nginx-ru@nginx.org
Cache TTL = 0
Здравствуйте. Я уже когда-то писал, что некоторые запросы бекенды должны всегда ревалидировать, в спецификации это документировано в трех параметрах заголовка Cache-Control. max-age=0 - кешировать если есть валидатор (ETag или Last-Modified) no-cache - не использовать кеш без ревалидации must-revalidate - нужна ревалидация Есть тикеты в багтрекере https://trac.nginx.org/nginx/ticket/1182 Amazon CloudFront, уже это потдерживает в своих патчах Nginx http://stackoverflow.com/questions/10621099/what-is-a-ttl-0-in-cloudfront-useful-for Я провел маленькое исследования, многие веб фреймворки используют параметр no-cache чтобы отключить кеширование, реже для этого используют max-age=0, но никто не использует для отключения кеширования параметр must-revalidate. Чтобы не нарушить обратную совместимость со многими фрейворками, безопасней всего научить Nginx понимать параметр must-revalidate. Если не указаны no-store, no-cache, max-age=0 но указан must-revalidate и бекенд отдал валидаторы ETag или Last-Modified, тогда Nginx сохраняет ответ в свой кеш и при запросах всегда проводит ревалидацию. Это потребность из реальных кейсов, спасибо. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,273298,273298#msg-273298 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
после yum update остались активны два мастер-процесса nginx
Здравствуйте! в файле /var/run/nginx.pid записано 26112 в файле /var/run/nginx.pid.oldbin записано 603 при обновлении nginx с версии 1.11.10 на версию 1.11.12 через yum update он ругнулся, что во время обновления произошла ошибка и остались висеть оба мастер-процесса со своими воркерами. официальная сборка из репозитория nginx.org mainline для centos 7. в sysctl.conf сервера прописано net.ipv4.ip_nonlocal_bind=1 и эта CentOS 7 - контейнер на OpenVZ 2.6.32-042stab120.18 если это может быть важно. ожидалось что после yum update останется только один мастер nginx. и только его воркер-процессы. в конфиге nginx прописано worker_processes 8; у старого мастера их почему-то было в два раза больше запущено. # pstree -cp systemd(1)─┬─nginx(603)─┬─nginx(26112)─┬─nginx(26826) ││ ├─nginx(26827) ││ ├─nginx(26828) ││ ├─nginx(26829) ││ ├─nginx(26830) ││ ├─nginx(26831) ││ ├─nginx(26832) ││ └─nginx(26833) │├─nginx(25993) │├─nginx(25994) │├─nginx(25995) │├─nginx(25996) │├─nginx(25997) │├─nginx(25998) │├─nginx(25999) │├─nginx(26000) │├─nginx(26160) │├─nginx(26161) │├─nginx(26162) │├─nginx(26163) │├─nginx(26164) │├─nginx(26165) │├─nginx(26166) │└─nginx(26167) # ps aux | grep nginx USER PID %CPU %MEMVSZ RSS TTY STAT START TIME COMMAND root 603 0.0 3.5 143696 73680 ?Ss Mar05 0:10 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx25993 0.0 3.9 152352 82552 ?S< Mar29 0:02 nginx: worker process nginx25994 0.0 3.9 152352 82580 ?S< Mar29 0:02 nginx: worker process nginx25995 0.0 3.9 152352 82556 ?S< Mar29 0:02 nginx: worker process nginx25996 0.0 3.9 152352 82580 ?S< Mar29 0:02 nginx: worker process nginx25997 0.0 3.9 152352 82604 ?S< Mar29 0:03 nginx: worker process nginx25998 0.0 3.9 152352 82588 ?S< Mar29 0:04 nginx: worker process nginx25999 0.0 3.9 152352 82588 ?S< Mar29 0:04 nginx: worker process nginx26000 0.0 3.9 152352 82640 ?S< Mar29 0:05 nginx: worker process root 26112 0.0 3.7 145824 77672 ?SMar29 0:01 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx26160 0.0 3.9 152352 82632 ?S< Mar29 0:05 nginx: worker process nginx26161 0.0 3.9 152352 82620 ?S< Mar29 0:06 nginx: worker process nginx26162 0.0 3.9 152352 82632 ?S< Mar29 0:08 nginx: worker process nginx26163 0.0 3.9 152352 82652 ?S< Mar29 0:09 nginx: worker process nginx26164 0.0 3.9 152352 82652 ?S< Mar29 0:10 nginx: worker process nginx26165 0.0 3.9 152352 82660 ?S< Mar29 0:12 nginx: worker process nginx26166 0.0 3.9 152352 82648 ?S< Mar29 0:14 nginx: worker process nginx26167 0.0 3.9 152352 82672 ?S< Mar29 0:16 nginx: worker process nginx26826 0.0 3.6 145828 76444 ?S< 05:00 0:05 nginx: worker process nginx26827 0.0 3.6 145828 76456 ?S< 05:00 0:06 nginx: worker process nginx26828 0.0 3.6 145828 76456 ?S< 05:00 0:07 nginx: worker process nginx26829 0.0 3.6 145828 76488 ?S< 05:00 0:12 nginx: worker process nginx26830 0.0 3.6 145828 76464 ?S< 05:00 0:09 nginx: worker process nginx26831 0.1 3.6 145828 76468 ?S< 05:00 0:17 nginx: worker process nginx26832 0.1 3.6 145828 76488 ?S< 05:00 0:26 nginx: worker process nginx26833 0.1 3.6 145828 76488 ?S< 05:00 0:21 nginx: worker process -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru