client timed out & readv() failed
Evgeniy Berdnikov
bgx на protva.ru
Чт Мар 3 21:12:10 UTC 2016
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 стоит файрвол.
> Так или иначе - "Connection reset by peer" при живом бекенде как
> бы намекает на то, что в первую очередь надо смотреть, что
> происходит в сети.
Я бы скорее подозревал наличие какой-то баги в сетевой карте.
Например, в неправильном подсчёте чексуммы для пакетов с опцией sack
при включенном rx/tx checksumming offload'е, из-за чего все пакеты при
ретрасмитах дропаются. Коннекция умирает по таймауту. Но при этом
закрывается пакетом RST, который идёт без sack и потому доходит до
ядра получателя, вот и "Connection reset by peer". Так как насытить
линк 10G непросто, то потерь мало, но стоит хоть одному фрейму
пропасть -- sack, затем ретрансмиссии с sack, таймаут, reset.
Можно придумать другие сценарии, наверное.
--
Eugene Berdnikov
Подробная информация о списке рассылки nginx-ru