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

Таймаут только на одном сайте, остальные летают

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
22 апреля, 17:27первое сообщение

Странная штука. В прогоне девять площадок, восемь идут ровно, отклик от 300 до 700 миллисекунд. Девятая висит и отваливается по таймауту почти всегда, доходит дай бог одно обращение из двадцати.

Из браузера на той же машине сайт открывается мгновенно. Через curl с той же машины висит. Пробовал поднимать таймаут до трёхсот секунд, всё равно висит, то есть это не медленно, это насмерть.

Куда копать, если восемь соседей по прогону чувствуют себя прекрасно?

бэкап перед правкой конфига
gremlin_dv
gremlin_dv
Знаток
сообщений 1840
с мар
1 сентября, 08:44#2

Висит на каком месте? Соединение вообще устанавливается или обрывается раньше?

три монитора и ни одного свободного
Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
8 февраля, 11:01#3

Сейчас посмотрел разбивку, вот она:

dns:       0.031
connect:   0.048
appconnect: 0.000
starttransfer: 0.000
total:     60.001

Соединение встало за 48 миллисекунд, дальше ноль.

бэкап перед правкой конфига
Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
15 июля, 14:18#4

Вот это и есть ответ на половину вопроса. connect прошёл, appconnect нулевой, значит висит рукопожатие шифрования. TCP до сайта доходит, а первый большой пакет от него до вас нет.

Такое почти всегда упирается в размер пакета по дороге. Механика простая: рукопожатие начинается с крошечных пакетов, они пролезают везде, а вот ответ сервера с цепочкой сертификата весит килобайта три и режется на куски по размеру канала. Если где-то на пути размер меньше вашего, узел должен прислать назад сообщение «нужна нарезка». Когда это сообщение кто-то по дороге глушит, ваша сторона просто ждёт пакета, который никогда не придёт. Отсюда и красивый ноль в appconnect при живом соединении.

Проверяется за минуту, обычным пингом с запретом на нарезку:

ищем предел размера пакета до сайта
ищем предел размера пакета до сайта

У восьми других площадок цепочка сертификата короче, она влезает в один пакет, поэтому вы про это и не знали.

конфиг без комментария это загадка
veta_l
veta_l
Новичок
сообщений 210
с янв, второй сезон
22 декабря, 17:35#5

а браузер тогда почему открывает

Артур Вагнер
Артур Вагнер
Знаток
сообщений 1290
с мая
1 мая, 08:52#6

Браузер сам щупает размер и снижает его при повторе, у него это встроено. curl честно ждёт, пока ему ответят.

конфиг без комментария это загадка
Юля Ким
Юля Ким
Знаток
сообщений 1240
с мая
8 октября, 11:09#7

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

Проверить в лоб: curl -4 https://target.example. Если с ключом полетело, ищите в именах.

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
15 марта, 14:26#8
Юля Ким: если с ключом полетело, ищите в именах

Проверил, с четвёркой висит ровно так же. И dig AAAA пустой. Значит имена в порядке, остаётся размер пакета.

бэкап перед правкой конфига
Борис Лапин
Борис Лапин
Знаток
сообщений 1960
с мар
22 августа, 17:43#9

Тогда правьте на своей стороне, ждать погоды на чужой смысла нет.

Два рабочих хода. Первый: подрезать размер на интерфейсе, через который уходит трафик, ip link set dev tun0 mtu 1400. Второй, более точный: подпилить объявляемый размер сегмента в момент установки соединения, тогда сайт сам пришлёт куски поменьше.

sudo iptables -t mangle -A FORWARD -p tcp --syn -j TCPMSS --clamp-mss-to-pmtu

Клампинг лучше тем, что подгоняет число под реальный путь, руками ничего подбирать не надо.

ostrov
ostrov
Участник
сообщений 505
с окт
1 января, 08:00#10

Добавлю сбоку. Такие висяки удобно ловить сравнением с двух разных точек выхода: если с одной точки сайт висит, а с другой отдаёт за полсекунды, вы сразу знаете, что дело в дороге. Я под это держу отдельный пакет, беру приватные серверные адреса под парсинг и гоняю один и тот же запрос параллельно, с машины и через выход. Пять минут работы, зато версия либо подтверждается, либо отпадает.

veta_l
veta_l
Новичок
сообщений 210
с янв, второй сезон
8 июня, 11:17#11

поняла, спасибо обоим

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
15 ноября, 14:34#12

Разбор закончен, отписываюсь.

Клампинг сегмента поставил, размер на туннеле опустил до 1400. Девятая площадка пошла с первого обращения, отклик 420 миллисекунд, ровно как у соседей. Параллельно, по совету ostrov, прогнал тот же запрос через вторую точку выхода: там сайт отдавал сразу и без правок, значит резало именно на моём пути.

Что помогло в порядке действий: разбивка по этапам через -w, ноль в appconnect, пинг с запретом нарезки, клампинг. Вся история заняла минут сорок, из них тридцать я потратил на веру в то, что сайт просто медленный. Смотрите на этапы сразу, они экономят вечер.

бэкап перед правкой конфига