Измеряем этапы HTTP-запроса с curl
Измеряем DNS, соединение и время первого байта через curl, не приписывая всю задержку базе данных.
- DNSНаходим адрес сервера
- СоединениеУстанавливаем TCP, для HTTPS — ещё TLS
- Первый байтЖдём начало ответа; времена curl считаются от старта
«Сайт медленный» — пока только впечатление. Время может уйти на DNS, соединение, TLS или ожидание ответа приложения. Curl умеет показать эти этапы для отдельного запроса. Снимем несколько измерений и разберём, какие выводы из них делать можно, а какие потребуют других данных.
Получаем один измеримый запрос
curl -sS -o /dev/null --connect-timeout 5 --max-time 20 \
-w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first=%{time_starttransfer} total=%{time_total} code=%{http_code}\n' \
https://example.com/Домены и ограничения времени замените под свою проверку. Ответ сохраняется в пустое устройство, а ошибки остаются видимыми. Значения времени отсчитываются от начала операции, поэтому их нельзя складывать как независимые длительности. Для простого запроса без перенаправлений разность соседних отметок помогает приблизительно оценить соответствующий этап. В сложном соединении интерпретация требует дополнительных сведений.
Не называем первый байт временем базы
Показатель первого байта включает действия до начала передачи и ожидание ответа. Большое значение не доказывает медленный SQL: возможны очередь приложения, сеть, промежуточный прокси и другие причины. Сравните результат с журналом конкретного запроса, временем приложения и его идентификатором. Не передавайте секретные заголовки или личные данные в публичный пример диагностики.
Выполните несколько одинаковых запросов с одной машины и сохраните каждый результат. Затем повторите измерение из другой разрешённой точки сети. Учитывайте кэш DNS, состояние серверного кэша и фоновые изменения нагрузки. Нельзя объявлять улучшение на основании одного удачного обращения после серии ошибок. Различайте недоступность ресурса и успешный, но медленный ответ.
Редиректы и незавершённые запросы
Команда не следует перенаправлениям автоматически. Если ответ содержит Location, сначала изучите его отдельно. При добавлении режима следования часть времён будет относиться к цепочке, а не только к последней странице. Также проверьте код завершения curl: оборванный запрос не является корректным измерением полной передачи.
Сохраните URL, время проверки, машину запуска, HTTP-код и параметры curl. Несколько повторов помогут увидеть, постоянна ли задержка. Загрузку картинок, сценариев и работу JavaScript измеряйте уже в браузере: быстрый ответ HTML ещё не означает, что интерфейс быстро готов к работе.
