Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумРазбор ошибок

curl 56 Recv failure: разбор причин

sysdiag
sysdiag
Знаток
сообщений 1975
с фев
15 июля, 14:42первое сообщение

Гоняю обход каталога, примерно 40 тысяч обращений за прогон. На четырёх процентах падает вот это:

curl: (56) Recv failure: Connection reset by peer

Повтор того же адреса через секунду проходит нормально. То есть адрес живой, страница живая, а соединение кто-то рвёт посреди чтения. Четыре процента от 40 тысяч это полторы тысячи повторов за ночь, хочется понять источник.

логи читаю раньше почты
hexdump
hexdump
Знаток
сообщений 940
с июн
22 декабря, 17:59#2

Пятьдесят шестой у curl означает ровно одно: мы уже отправили запрос, ждём тело ответа, и в этот момент прилетел RST. Больше он ничего не значит, поэтому дальше надо сузить, кто именно прислал.

Ответьте на три вопроса, они делят задачу пополам каждый:

  • падает на первом обращении к хосту или на переиспользованном соединении;
  • падает на GET или на POST с большим телом;
  • падает равномерно по времени или пачками.

Быстрый способ отделить переиспользование: прогоните ту же сотню адресов с запретом на повтор соединения и сравните долю отказов.

две сотни обращений, с повтором соединения и без
две сотни обращений, с повтором соединения и без

Если картина такая же, вы держите соединение дольше, чем его готова держать та сторона. Она молча закрывает по своему таймауту, вы стучитесь в закрытую дверь и получаете RST.

sysdiag
sysdiag
Знаток
сообщений 1975
с фев
1 мая, 08:16#3
hexdump: падает на переиспользованном соединении

Проверю сегодня же, зацепка похожа на мою картину. Пачками, кстати, да.

логи читаю раньше почты
netmon
netmon
Знаток
сообщений 1350
с мая
8 октября, 11:33#4

Пока проверяете, поставьте рядом слушателя. Догадки про RST хороши, но видно его прямо в проводе, и там же видно, от кого он пришёл.

ловим сброс на обходе
ловим сброс на обходе

Смотрите на адрес источника. Приходит с адреса сайта, значит закрывает сайт. Приходит с ближнего узла, значит режет что-то по дороге.

Света Панина
Света Панина
Новичок
сообщений 160
с мар, второй сезон
15 марта, 14:50#5

а повтор на 56 вообще нормально ставить или это костыль

Денис Прошин
Денис Прошин
Знаток
сообщений 1000
с июн
22 августа, 17:07#6

Ставить нормально, 56 по своей природе повторяемый: тело ответа вы не получили, ничего не испортили, обращение можно смело слать заново.

Только повторяйте с растущей паузой и на новом соединении, иначе снова попадёте в тот же дохлый канал. И считайте повторы отдельной цифрой, чтобы не потерять момент, когда их станет вдвое больше обычного.

Отдельно про POST с телом больше килобайт на пятьдесят: там 56 бывает от разного размера пакета по дороге. Проверяется просто, тем же обращением с уменьшенным телом.

sysdiag
sysdiag
Знаток
сообщений 1975
с фев
1 января, 08:24#7

Отчитываюсь, разбор сошёлся.

Сайт закрывает простаивающее соединение через пятнадцать секунд, у меня в пуле стояло шестьдесят. Между двумя обращениями к одному хосту у меня как раз проходило секунд двадцать пять, потому и пачками: пачка идёт, когда очередь дотягивается до давно лежавшего канала. tcpdump подтвердил, RST приходил с адреса сайта, ближние узлы ни при чём.

Что помогло: срезал время жизни простаивающего соединения до десяти секунд и включил повтор на 56 с новым каналом. Отказы упали с четырёх процентов до трёх сотых, оставшиеся ловит повтор с первого раза. Ночной прогон стал короче на сорок минут, потому что полторы тысячи повторов ушли.

логи читаю раньше почты