Назад | Перейти на главную страницу

Профилирование времени ответа HTTP

У меня обратный прокси nginx. Сервер почти обслуживает 600-700 запросов в секунду. У меня есть плагин времени загрузки Munin HTTP, который выводит это:

http://monitor.wingify.com/munin/visualwebsiteoptimizer.com/lb1.visualwebsiteoptimizer.com-http_loadtime.html

Теперь проблема в том, что я вижу некоторые всплески на графике. Ожидаемое время отклика всегда должно быть менее 200 мс. Я слежу за системным журналом и сообщениями, но не могу понять истинную причину этого. Мне было интересно, есть ли какая-нибудь хорошая система профилирования времени ответа HTTP, которую я могу установить / встроить с этим сервером nginx и получить подробные отчеты / журналы о разбиении времени, затрачиваемого на разные вещи, и о том, что именно является причиной всплесков.

Система профилирования также поможет мне понять узкие места и способы дальнейшей оптимизации задержки.

Сейчас самое важное - исследовать причину скачков на графиках времени загрузки HTTP (о подобной схеме сообщают внешние мониторы - Pingdom) и исправить ее, чтобы получить согласованное время отклика.

Спасибо

Вот Это Да! Как вы измеряете время загрузки? Насколько я знал, nginx будет сообщать только время ответа на запрос ($ request_time), что совсем другое.

Несколько месяцев я плохо смотрел, но в прошлый раз, когда я проверял, было очень мало возможностей для анализа времени отклика. PastMon выглядит многообещающе. Есть и коммерческие инструменты вроде Client Vantage (довольно дорогие).

Я закончил тем, что написал свой собственный - на самом деле не так уж сложно создать простой скрипт awk, чтобы сообщать обо всех попаданиях, превышающих пороговое значение, - но помните, что вам нужно вернуться и проверить, как URL-адрес ведет себя остальной частью время. например

# looking for URLs matching 'example.com/interesting' 
# with URL in $6 and $request_time in $8

BEGIN {}
$6==/example.com\/interesting/ {
  if ( $8>0.3) {
     n[$6]+=1;       # no of hits by URL
     t[$6]+=$8;      # sum of times by url
     s[$6]+=$8 * $8; # sum of sq of times by url
     if (m[$6]<$8) m[$6]=$8; # max time for url
  }
}
END {
   print "url, n, avg, stddev, max";
   for (x in n) {
     print x ", " n[x] ", " t[x]/n[x] ", " sqrt(s[x]-t[x]*t[x])/(n[x]-1) ", " m[x]; 
   }
}

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