Я запускаю сервер приложений Rails. Моя установка:
Я использую NewRelic для мониторинга работающего приложения. Недавно я включил мониторинг задержки в очереди запросов, в основном из любопытства. Я был удивлен, обнаружив, что задержка в очереди запросов часто бывает такой же или более длительной, чем фактический код Ruby и время выполнения базы данных. ~ 200 мс кажется высоким, не так ли?
Большая часть онлайн-информации указывает на то, что это происходит, когда очередь запросов ожидает, когда работник станет доступным, но это не так. Как видно ниже, мы почти не используем подготовленные экземпляры. Во время пиковых нагрузок мы редко превышаем 30%.
Еще несколько примечаний:
В чем может быть проблема?
200 мс не кажутся такими уж ужасными. Метрика «очереди запросов» - это мера времени между вашим веб-сервером, регистрирующим запрос, и моментом загрузки агента New Relic (после before_filters
). То, как это измеряется, может создать впечатление, что проблема существует, когда ее не существует. Задержка у вас хорошая и ровная, без скачков, которые указывали бы на то, что у вас заканчиваются рабочие или не хватает ресурсов / ЦП. Ты можешь использовать watch passenger-status
чтобы проверить это. Вы также можете дважды проверить использование ресурсов сервера локально с помощью утилит Linux:
top, iotop, vmstat, sar (systat)
Все еще хотите заняться оптимизацией? Проверьте все, что выполняется до агента New Relic. Возможные болевые точки:
Потребуется немного покопаться. Удачи!