Hello! On Fri, Sep 16, 2022 at 06:18:53AM -0400, opan wrote:
> Проксируя запросы на fastcgi-бекенд, передаем в одном из заголовков $msec. > При этом приложение, сравнивая время, полученное в заголовке, и настоящее > для него, дает аномальный дифф - до 40мс внутри локалки, а иногда и > отрицательное, до -5мс. > > Внутри локальной сети пакеты бегают быстро - от 1 до 7мс, resolver_timeout > не задан, ntp на сервере с nginx и бекенде синхронизирован (разница с > ntp-сервером на каждом из серверов в пределах 1мс). > > Пытаемся разобраться и возник вопрос, какое время в таком случае (при > прокидывании в заголовке) показывает $msec? Момент получения запроса от > клиента , момент коннекшна к бекенду, момент соединения с бекендом или еще > какое-то? Как уже ответил Сергей, время - на момент формирования заголовков запроса к бэкенду, то есть после получения клиентского запроса, но до попыток установления соединения с бэкендом (и до резолвинга, но в вашем случае его вроде как быть не должно). Но тут ещё важно учитывать, что время в nginx'е обновляется только в начале каждой итерации цикла обработки событий, в момент получения из ядра очередной порции событий. Соответственно если какой-то из обрабатываемых в той же итерации запросов пошёл, например, на диск - он может легко задержать обработку миллисекунд на десять (ибо seek time), а если таких запросов будет два - то и на все двадцать, и так далее. То же относится и к другим блокирующимся операциям. Всё это может давать достаточно большую положительную разницу с текущим временем в приложении, даже если собственно установление соединения и отправка конкретного запроса произошла быстро. Откуда в вашем случае отрицательная разница - вопрос, вероятно, к приложению. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list -- nginx-ru@nginx.org To unsubscribe send an email to nginx-ru-le...@nginx.org