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