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