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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru