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