Re: Зависимость значений директив *_timeout от значения timer_resolution

Maxim Dounin mdounin на mdounin.ru
Вт Фев 12 14:59:01 UTC 2019


Hello!

On Tue, Feb 12, 2019 at 05:06:09PM +0300, igor isaenko wrote:

> Здравствуйте.
> Я заметил интересный момент и хотел бы уточнить, правильно ли я его понял.
> Похоже, работа директив директив *_timeout сильно зависит от значения
> timer_resolution.
> А точнее, лучше не ставить таймауты меньше или равными timer_resolution.
> 
> При timer_resolution = 100ms, nginx узнает время раз в 100 миллисекунд.
> Т.е. грубо говоря, у него один момент времени "12:00:00 30:00,100", а
> второй момент времени - только "12:00:00 30:00,200".
> Все временные метки помечаются временем с точностью до 100 мс, потому что
> nginx округляет время до 100 мс.

[...]

> Не подскажите, правильно ли я нашел причину?
> Может быть, стоит указать в документации, что timer_resolution должен быть
> меньше, чем самый маленький *_timeout?

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

Да и вообще использовать таймауты меньше 300 миллисекунд 
(NGX_TIMER_LAZY_DELAY) - не очень хорошая идея, nginx с ними не 
будет работать нормально.  Так как при замене таймеров на близкие 
(отстающие менее чем на 300 миллисекунд от предыдущего 
установленного таймера) - nginx, в целях экономии ресурсов, 
таймеры на самом деле менять не будет.  Соответственно для разовых 
таймаутов на connect - работать будет, а скажем для перевзводимых 
таймаутов на чтение - уже нет.  Так как при обновлении таймаута 
nginx увидит различие меньше чем на 300 миллисекунд - и ничего не 
будет обновлять, а тем временем собственно таймаут случится.

-- 
Maxim Dounin
http://mdounin.ru/


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