Re: nginxQuic: медленный ответ от сервера.

2022-07-01 Пенетрантность Roman Arutyunyan
Добрый день,

> On 28 Jun 2022, at 09:01, izor...@gmail.com wrote:
> 
> Добрый день, Роман.
> 
> Я ещё заметил одну ошибку в работе HTTP 3 протокола.
> Через очень долгое время (5-8 часов), браузер начинает отправлять запросы по 
> HTTP 2 протоколу, вместо
> HTTP 3. Собрал debug-лог, но не смог проследить с какого момента прошло 
> переключение. Если понадобится,
> то к вечеру смогу отправить вам логи.


Проблема появилась тогда, когда вы начали реконфигурацию nginx (послали SIGHUP).
При появлении новых воркеров ломается логика распределения квиковых соединений 
по воркерам.
В итоге, например, новый пакет может прийти в старый воркер, которым он будет 
проигнорирован.

Все бы могло относительно быстро рассосаться после череды ошибок, если бы у вас 
не висел один запрос с
проксировнием вебсокетов, который не давал завершиться старому воркеру.
Кроме того, похоже, у вас выключен таймаут на шатдаун воркеров.

Если у вас (свежий) Linux, то проблема с распределением квиковых клиентов по 
воркерам решается включением bpf-модуля.
Для этого укажите следующую директиву на верхнем уровне конфига:

  quic_bpf on;

При этом nginx должен иметь админские права (CAP_SYS_ADMIN) при запуске.


Roman Arutyunyan
a...@nginx.com




___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-06-12 Пенетрантность izorkin
Здравствуйте, Роман.

Спасибо за помощь в поиске и устранении проблемы!
Отключение директивы ssl_ecdh_curve в Nginx помогло.

Планируется ли делать баг-репорт в Chrome?

Вы писали 12 июня 2022 г., 21:27:53:

> Добрый день,

> Удалось выяснить следующее.  Имеет место проблема на стороне Хрома.  Если
> точнее, в гугловой библиотоке QUICHE.  Проблемa триггерится комбинацией
> EarlyData + HelloRetryRequest.  Если Хром отправил EarlyData, которую сервер
> проигнорировал, то далее клиент не шлет новый ClientHello в ответ на
> HelloRetryRequest т.к. зачем-то ждет подтверждения EarlyData.  В итоге
> соединение зависает и таймаутится.

ClientHello ->>
EarlyData   ->> (ignore)
> <- HelloRetryRequest
> (timeout)

> Самый простой способ обойти проблему - избежать отправки HelloRetryRequest.
> В рассматриваемом случае для этого достаточно было убрать из конфигурации
> nginx директиву ssl_ecdh_curve.

> Заткнуть это также можно и в QUICHE при помощи следующего патча:

> diff --git a/quiche/quic/core/quic_session.cc 
> b/quiche/quic/core/quic_session.cc
> index d2976006..ad5c4d3c 100644
> --- a/quiche/quic/core/quic_session.cc
> +++ b/quiche/quic/core/quic_session.cc
> @@ -2404,6 +2404,9 @@ bool QuicSession::RetransmitLostData() {
>return false;
>  }
>}
> +  if (connection()->encryption_level() == ENCRYPTION_ZERO_RTT) {
> +return true;
> +  }
>while (!streams_with_pending_retransmission_.empty()) {
>  if (!CanWriteStreamData()) {
>break;

> 
> Roman Arutyunyan
> a...@nginx.com
> ___
> nginx-ru mailing list -- nginx-ru@nginx.org
> To unsubscribe send an email to nginx-ru-le...@nginx.org


-- 
С уважением,
 Izorkin  mailto:izor...@gmail.com

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-06-12 Пенетрантность Roman Arutyunyan
Добрый день,

On Mon, May 30, 2022 at 04:27:54PM +0400, Roman Arutyunyan wrote:
> Добрый день,
> 
> Да, я видел. спасибо.
> 
> > On 30 May 2022, at 16:22, izor...@gmail.com wrote:
> > 
> > Добрый день Роман.
> > 
> > Скинул ссылку с дампом на личную почту.
> > Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось 
> > без ответа
> > 
> > 
> > -- 
> > С уважением,
> > Izorkin  mailto:izor...@gmail.com
> > 
> > ___
> > nginx-ru mailing list -- nginx-ru@nginx.org
> > To unsubscribe send an email to nginx-ru-le...@nginx.org
> 
> 
> Roman Arutyunyan
> a...@nginx.com

> ___
> nginx-ru mailing list -- nginx-ru@nginx.org
> To unsubscribe send an email to nginx-ru-le...@nginx.org

Удалось выяснить следующее.  Имеет место проблема на стороне Хрома.  Если
точнее, в гугловой библиотоке QUICHE.  Проблемa триггерится комбинацией
EarlyData + HelloRetryRequest.  Если Хром отправил EarlyData, которую сервер
проигнорировал, то далее клиент не шлет новый ClientHello в ответ на
HelloRetryRequest т.к. зачем-то ждет подтверждения EarlyData.  В итоге
соединение зависает и таймаутится.

ClientHello ->
EarlyData   -> (ignore)
<- HelloRetryRequest
(timeout)

Самый простой способ обойти проблему - избежать отправки HelloRetryRequest.
В рассматриваемом случае для этого достаточно было убрать из конфигурации
nginx директиву ssl_ecdh_curve.

Заткнуть это также можно и в QUICHE при помощи следующего патча:

diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index d2976006..ad5c4d3c 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -2404,6 +2404,9 @@ bool QuicSession::RetransmitLostData() {
   return false;
 }
   }
+  if (connection()->encryption_level() == ENCRYPTION_ZERO_RTT) {
+return true;
+  }
   while (!streams_with_pending_retransmission_.empty()) {
 if (!CanWriteStreamData()) {
   break;


Roman Arutyunyan
a...@nginx.com
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-05-30 Пенетрантность Roman Arutyunyan
Добрый день,

Да, я видел. спасибо.

> On 30 May 2022, at 16:22, izor...@gmail.com wrote:
> 
> Добрый день Роман.
> 
> Скинул ссылку с дампом на личную почту.
> Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось без 
> ответа
> 
> 
> -- 
> С уважением,
> Izorkin  mailto:izor...@gmail.com
> 
> ___
> nginx-ru mailing list -- nginx-ru@nginx.org
> To unsubscribe send an email to nginx-ru-le...@nginx.org


Roman Arutyunyan
a...@nginx.com




___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-05-30 Пенетрантность izorkin
Добрый день Роман.

Скинул ссылку с дампом на личную почту.
Вероятно, что могло попасть в спам, т.к. предыдущее письмо тоже осталось без 
ответа


-- 
С уважением,
 Izorkin  mailto:izor...@gmail.com

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-05-29 Пенетрантность Evgeniy Berdnikov
On Sat, May 28, 2022 at 12:03:19PM +0300, izor...@gmail.com wrote:
> Сервер nginx не может обработать несколько первых пакетов от клиента по не 
> известной причине.
> В одном из прошлых обсуждений с разработчиком я предоставил свои логи, но до 
> сих пор не удалось решить проблему.

 Звучит как сакраментальное "От меня пули ушли". На месте разработчиков я бы
 сказал: если не можете локализовать проблему, так предоставьте testcase.
 То есть минимальную конфигурацию, на которой проблема может быть надёжно
 воспроизведена и изучена посторонними.

> Вы писали 28 мая 2022 г., 11:15:15:
> 
> > On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote:
> 
> >  Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки,
> >  да и в том же debug логе может оказаться полезная информация.

-- 
 Eugene Berdnikov
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-05-28 Пенетрантность izorkin
Здравствуйте, Evgeniy.

Сервер nginx не может обработать несколько первых пакетов от клиента по не 
известной причине.
В одном из прошлых обсуждений с разработчиком я предоставил свои логи, но до 
сих пор не удалось решить проблему.


Вы писали 28 мая 2022 г., 11:15:15:

> On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote:

>  Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки,
>  да и в том же debug логе может оказаться полезная информация.


-- 
С уважением,
 Izorkin  mailto:izor...@gmail.com

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: nginxQuic: медленный ответ от сервера.

2022-05-28 Пенетрантность Evgeniy Berdnikov
On Sat, May 28, 2022 at 01:36:02AM +0300, izor...@gmail.com wrote:
> Протестировал последнюю ревизию nginxQuic 5b1011b5702b.
> Проблема с долгим ответом от сервера всё ещё сохранилась.
> От клиента приходит запрос, через tcpdump видно что запрос доходит до сервера 
> nginx (в debug логе отображается событие), но
> по какой-то причине, nginx отдаёт ответ только через 5-7 секунд.

 Ну так изучите чем занимается сервер эти 5-7 секунд, strace/ltrace в руки,
 да и в том же debug логе может оказаться полезная информация.
-- 
 Eugene Berdnikov
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org