ignore long locked inactive cache entry

Maxim Dounin mdounin на mdounin.ru
Пт Май 7 21:36:10 UTC 2021


Hello!

On Fri, May 07, 2021 at 10:40:52PM +0300, Gena Makhomed wrote:

> On 07.05.2021 21:19, Maxim Dounin wrote:
> 
> >> [alert] 2569378#2569378: *449013402 open socket #29 left in connection 3
> >> [alert] 2569378#2569378: *449013403 open socket #32 left in connection 8
> >> [alert] 2569378#2569378: aborting
> 
> [...]
> 
> >> Конфиг бекенда, на котором была эта ошибка, примерно такой:
> >>
> >>       aio threads;
> >>       aio_write on;
> > 
> > Скорее всего в данном случае дело в aio_write, см.
> > https://trac.nginx.org/nginx/ticket/2162.
> 
> Понятно, спасибо!
> 
> Максим, Вы говорите в комментариях к этому тикету:
> 
>  > It is not expected to affect real-world use cases,
>  > though probably worth fixing anyway.
> 
> У меня этот bug проявился именно что в real-world use case.

Ну видимо сильно зависит от use case'а.  Такое может быть, когда кроме 
aio-записи в кэш ничего больше в рабочем процессе не остаётся, 
тогда shutdown может случиться раньше, чем надо.  В норме такого 
не бывает, т.к. shutdown задерживают медленные клиенты.

>  > If the worker process exits prematurely while a requests updates
>  > the cache with proxy_cache_use_stale updating;, the cache item
>  > is stuck in the UPDATING state and won't be updated till the cache
>  > is reloaded (for example, due to nginx restart or binary upgrade).
> 
>  > As already explained in comment:2, this is not expected to happen
>  > in real-world use cases. If you want to be completely safe from
>  > the particular issue, avoid using aio,
>  > most notably avoid aio_write on;.
> 
> Другими словами aio и aio_write пока что еще не production ready.
> Неожиданно, что этот момент не отображен в документации к nginx.

Тут зависит от того, с чем сравнивать.  Если, скажем, с 
пригодностью протокола HTTP/2 к production-использованию в 
современном интернете - то и aio, и даже aio_write существенно 
более production ready.

Но вообще сама по себе функциональность aio_write - достаточно 
новая и достаточно сложная, и предназначена в первую очередь для 
очень специфических конфигураций, где по другому никак.  Если её 
включать просто так для всего, да ещё и комбинировать с 
механизмами, крайне чувствительными к любым отклонениям - можно 
найти себе приключений.  Как, впрочем, и много где ещё.

Патчи, что называется, welcome.  Тем более, что основной вопрос 
там - как это красиво исправить, по возможности вписав в 
существующую инфраструктуру, не изобретая новых механизмов для 
задержки shutdown'а.

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


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