client timed out & readv() failed

Maxim Dounin mdounin на mdounin.ru
Чт Мар 3 19:49:34 UTC 2016


Hello!

On Thu, Mar 03, 2016 at 09:41:09PM +0300, Evgeniy Berdnikov wrote:

> On Thu, Mar 03, 2016 at 08:36:28PM +0300, Maxim Dounin wrote:
> > Hello!
> > 
> > On Thu, Mar 03, 2016 at 06:53:43PM +0300, Vadim Lazovskiy wrote:
> > 
> > > Здравствуйте.
> > > 
> > > Возможно немного не по теме, но возможно кто-то сталкивался.
> > > 
> > > Есть upstream на nginx раздающий файлы.
> > > Есть frontend на nginx проксирующий и кэширующий их.
> > > 
> > > Периодически в логах появляются ошибки:
> > > 
> > > upstream (nginx 1.2.9):
> > > 2016/03/03 18:28:57 [info] 16552#0: *190295515 client timed out (110:
> > > Connection timed out) while sending response to client, client: IP, server:
> > > SERVER, request: "GET /URI HTTP/1.0", host: "SERVER", referrer: "REFER"
> > > 
> > > frontend (nginx 1.9.11):
> > > 2016/03/03 18:27:56 [error] 22785#22785: *168191 readv() failed (104:
> > > Connection reset by peer) while reading upstream, client: IP, server:
> > > SERVER, request: "GET /URI HTTP/1.1", subrequest: "/URI", upstream:
> > > "UPSTREAM", host: "SERVER", referrer: "REFER"
> > > 
> > > Причем фронтенд рапортует, что ничего не сделать на минуту раньше, нежели
> > > бакенд.
> > > 
> > > frontend подключен по 10G, примерно 4G исходящего и 2.5G входящего трафика.
> > > backend - port channel из 4 1G линков, недостатка в полосе не имеет.
> > > 
> > > Кто-нибудь сталкивался с подобными ошибками? С чем может быть связано и что
> > > подкрутить?
> > 
> > Я бы для начала попробовал поискать statefull firewall между 
> > фронтендом и бекендом.  Возможно, у него кончаются state'ы, и он 
> > таким нехитрым образом пытается об этом сообщить.
> 
>  Нет, "while sending response to client" и "while reading upstream"
>  однозначно свидетельствуют о том, что соединение установлено.
>  Поэтому переполнение таблицы коннекций исключается.

Это очень сильно зависит от того, как именно ведёт себя firewall, 
когда у него заканчиваются state'ы.  E.g., pf умеет уменьшать 
таймауты в случае большого числа state'ов, и соответственно может 
убить соединение в любой момент времени.

Так или иначе - "Connection reset by peer" при живом бекенде как 
бы намекает на то, что в первую очередь надо смотреть, что 
происходит в сети.

-- 
Maxim Dounin
http://nginx.org/



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