Мониторинг производительности всех слоев системы - PullRequest
2 голосов
/ 24 мая 2011

Я использую несколько инструментов тестирования нагрузки (Loadrunner, JMeter, NeoLoad) для тестирования производительности различных приложений.Мне интересно, можно ли контролировать все уровни стека приложений, например.Скажем, у меня есть следующая цепочка данных.

Loadbalancer <-x-> Сервер приложений <-x-> RMI <-x-> Приложение Java <-x-> MQ <-x-> Устаревшее приложение <-x-> База данных

Где я пометил x в цепочке, я заинтересован в мониторинге, например, среднее время отклика.

Очевидно, что мы могли бы просто создать оболочку для всех конечных точек, которая собирала бы статистику для нас, и, возможно, мы могли бы импортировать ее в loadrunner или другие инструменты тестирования нагрузки и боковую линию с помощью инструментов, встроенных в статистику производительности, но, возможно, есть инструменты/ приложения, которые уже это делают?

Если нет, то как нам действовать, чтобы собрать такую ​​статистику?

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Стандарт для этого должен был быть Измерение реакции приложения (ARM) . Это был междисциплинарный набор API, который делал именно то, что вы искали. Проблема в том, что продукты, которые реализуют эту спецификацию, как правило, являются большими, дорогими инструментами мониторинга уровня предприятия. Подумайте о многонедельных установках, консультантах, инфраструктуре и множестве модных слов.

Тем не менее, если это критически важное приложение с критическим бюджетом, это может быть то, что вам нужно. Но, возможно, вы сможете построить свой собственный, который будет достаточно просто без особых усилий. Быстрый поиск включает хотя бы одну реализацию ARM с открытым исходным кодом , если вы все еще хотите использовать этот API.

Другой вариант - просто иметь транзакции, которые вы можете запускать на каждом уровне системы, чтобы проверить общую отзывчивость. Например, у вас может быть статическая веб-страница на LB, запрет на передачу сообщений на сервере приложений, сервлет «hello» в приложении Java, размещение сообщения непосредственно в очереди и т. Д. Во время теста производительности / загрузки, они могут быть напрямую затронуты инструментом нагрузочного тестирования, или вы можете написать вызов сервлета / приложения-оболочки, который делает это как отдельный HTTP (RMI?) вызов. Запуск их несколько раз в минуту не увеличит нагрузку на систему, но поможет вам определить, какой уровень медленнее. Хорошая особенность этого подхода в том, что он также работает на производстве, просто следите за проблемами безопасности.

Для однопользовательского теста, когда вы знаете, что у вас есть проблемы (например, этот tx "медленный"), мне также очень повезло с трассировкой сети. Это очень утомительно, но когда вы не уверены, какой уровень медленный, запуск сетевой трассировки на нескольких машинах и запуск одного tx обычно дают хорошее представление о том, что делает система.

1 голос
/ 24 мая 2011

В прошлом я занимался этим разложением несколькими способами.Первый находится на очень низком уровне с использованием данных, полученных анализатором протокола, чтобы найти моменты времени, когда диалог покидает уровень X и входит в уровень Y. Второй метод заключается в использовании проверки журналов для различных уровней.Что-то, что может сделать ваше исследование весьма полезным в этом случае, - это общий сервер журналов для всех ваших компонентов (syslog, Rsyslog и т. Д.) И хороший инструмент для анализа журналов, такой как свободно доступный Microsoft Logparser.Третий способ использования контрольного журнала для приложения, хранящегося в базе данных.Вы можете обнаружить это при работе с приложениями в стиле шины корпоративных сервисов, которые имеют модель потребителя / производителя и шину для передачи информации, а не прямого соединения.Контрольные записи, которые я видел, обычно хранятся в базе данных и позволяют отслеживать отдельные транзакции через всю инфраструктуру приложения.Ваш балансировщик нагрузки, как сетевое устройство, может не подходить для этого.

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

Что касается перехода от собранных данных в LoadRunner,эта часть очень механическая.Программа Analysis поддерживает интерфейс для импорта внешних точек данных.Формат очень специфичен и задокументирован как в справочной, так и в онлайн-документации.Этот процесс импорта работает очень хорошо, так как мне часто приходится использовать его для сбора статистики с хостов, к которым у меня нет прямого доступа к мониторингу, но которые необходимо включить как часть контролируемой тестовой инфраструктуры.

Джеймс Пули

Модератор (YahooGroups LoadRunner, Advanced-Loadrunner; GoogleGroups lr-LoadRunner; Linkedin LoadRunner, LoadRunnerByTheHour; SQAForums LoadRunner, WinRunner)

...