client timed out & readv() failed
Maxim Dounin
mdounin на mdounin.ru
Пт Мар 4 02:24:31 UTC 2016
Hello!
On Fri, Mar 04, 2016 at 12:12:10AM +0300, Evgeniy Berdnikov wrote:
> On Thu, Mar 03, 2016 at 10:49:34PM +0300, Maxim Dounin wrote:
> > 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:
> > > > Я бы для начала попробовал поискать statefull firewall между
> > > > фронтендом и бекендом. Возможно, у него кончаются state'ы, и он
> > > > таким нехитрым образом пытается об этом сообщить.
> > >
> > > Нет, "while sending response to client" и "while reading upstream"
> > > однозначно свидетельствуют о том, что соединение установлено.
> > > Поэтому переполнение таблицы коннекций исключается.
> >
> > Это очень сильно зависит от того, как именно ведёт себя firewall,
> > когда у него заканчиваются state'ы. E.g., pf умеет уменьшать
> > таймауты в случае большого числа state'ов, и соответственно может
> > убить соединение в любой момент времени.
>
> Не думаю, что у вопрошавшего на линке скоростью 10G стоит файрвол.
Практика показывает, что у многих - стоит. И выливается это
зачастую как раз в подземный стук при увеличении нагрузки, когда
state'ы начинают заканчиваться.
> > Так или иначе - "Connection reset by peer" при живом бекенде как
> > бы намекает на то, что в первую очередь надо смотреть, что
> > происходит в сети.
>
> Я бы скорее подозревал наличие какой-то баги в сетевой карте.
>
> Например, в неправильном подсчёте чексуммы для пакетов с опцией sack
> при включенном rx/tx checksumming offload'е, из-за чего все пакеты при
> ретрасмитах дропаются. Коннекция умирает по таймауту. Но при этом
> закрывается пакетом RST, который идёт без sack и потому доходит до
> ядра получателя, вот и "Connection reset by peer". Так как насытить
> линк 10G непросто, то потерь мало, но стоит хоть одному фрейму
> пропасть -- sack, затем ретрансмиссии с sack, таймаут, reset.
В таком сценарии непонятно, почему бекенд не видит ошибку сразу же, а
ждёт ещё минуту после RST, после чего закрывает соединение по
таймауту.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru