Существует два типа нагрузочного тестирования - определение узких мест и пропускная способность.Этот вопрос заставляет меня поверить в то, что речь идет о узких местах, поэтому количество пользователей является чем-то вроде красной селедки, вместо этого целью является поиск областей конфигурации, которые можно улучшить для повышения параллелизма.
Узкие места приложения обычно делятся на три категории: база данных, утечка памяти или медленный алгоритм.Их обнаружение включает в себя нахождение рассматриваемой заявки под нагрузкой (то есть под нагрузкой) в течение продолжительного периода времени - не менее часа, возможно, до нескольких дней.Jmeter - хороший инструмент для этой цели.Одной из вещей, которые следует учитывать, является запуск одного и того же теста с включенной обработкой файлов cookie (т. Е. Jmeter сохраняет файлы cookie и отправляет их при каждом последующем запросе) и отключается - иногда вы получаете очень разные результаты, и это важно, поскольку последний фактически представляет собой симуляцию того,сканеры делают на ваш сайт.Ниже приведены подробные сведения об обнаружении узких мест:
База данных
Таблицы без индексов или операторов SQL, включающих несколько объединений, являются частыми узкими местами приложений.Каждый сервер баз данных, с которым я имел дело, MySQL, SQL Server и Oracle имеет некоторый способ регистрации или идентификации медленно выполняющихся операторов SQL.MySQL имеет медленный журнал запросов, тогда как SQL Server имеет динамические административные представления, которые отслеживают самый медленный SQL-запрос.После того, как вы освоите медленные операторы, используйте план объяснения, чтобы увидеть, что движок базы данных пытается сделать, используйте любые функции, которые предлагают индексы, и рассмотрите другие стратегии - такие как денормализация - если эти два варианта не устраняют узкое место,
Утечка памяти
Включите подробное ведение журнала сбора мусора и порт мониторинга JMX.Затем используйте jConsole, которая обеспечивает намного лучшие графики, чтобы наблюдать тенденции.В частности, утечки, как правило, обнаруживаются как заполнение пробелов Старого или Пермского поколений.Утечки являются узким местом, поскольку JVM тратит все больше времени на попытки безуспешного сбора мусора, пока не возникнет ошибка OOM.
Perm Gen подразумевает необходимость увеличения места в качестве параметра командной строки для JVM.В то время как Old Gen подразумевает утечку, где вы должны остановить нагрузочное тестирование, сгенерировать дамп кучи, а затем использовать Eclipse Memory Analysis Tool для определения утечки.
Медленный алгоритм
Это сложнее отследить.Наиболее частыми нарушителями являются синхронизация, межпроцессное взаимодействие (например, RMI, веб-сервисы) и дисковый ввод-вывод.Другая распространенная проблема - код, использующий вложенные циклы (посмотрите на производительность O (n ^ 2)!).
Лучший способ найти эти проблемы в отсутствие некоторых более глубоких знаний - генерировать трассировки стека.Они скажут, что все потоки делают в данный момент времени.Вам нужны блокированные потоки или несколько потоков, которые обращаются к одному и тому же коду.Это обычно указывает на некоторую медлительность в кодовой базе.