Высокая производительность

индекс
187,32

Нагрузочное тестирование «по-быстренькому»

Может кому будет интересно как «по-быстрому» провести нагрузочное тестирование своего веб-приложения.
Подробности под катом

Вместо предисловия


На сегодняшнем стендапе Марек (программист из Польши принимающий участие в проекте EmForge) сказал, что общался с рядом друзей, у которых в прошлом был большой опыт работы с Liferay (который мы как раз активно используем) — и опыт оказался очень негативный, в первую очередь из-за проблем со скоростью. Некоторые проекты тупо накрылись из-за того что эти проблемы так и не получилось решить.

Нет — мы конечно собирались проводить нагрузочное тестирование, но не сейчас, чуть попозже, когда будет побольше функционала, и то, чисто что бы убедиться что все ок, или «не ОК» в каких-то определенных местах — и их править.
Но тут вопрос встал ребром — если все так плохо — то какие-то решения надо принимать уже сейчас — пока не стало поздно. Вывод один — нагрузочное тестирование получает более высокий приоритет по сравнению с остальными задачами

Не «по-быстренькому»


Изначально планировалось идти стандартным путем — взять JMeter, написать для начала простенький скрипт обхода основных страниц с основной функциональностью анонимным пользователем — потом усовершенствовать помаленьку, параллельно решая вопросы как грамотно запустить это добро на нескольких клиентский машинах.

Вообщем задача не на один час

А по-быстренькому?


Но тут я вспомнил, что на Хабре была статья (статью к сожалению не нашел — так бы кинул ссылку), где человек сетовал, что люди не прогоняют нагрузочное тестирование на своем сайте, шлют ссылку на хабр, а потом, когда надо снимать «сливки» с хабраэффекта мучительно сайт поднимают ( а пользователи не видят ничего кроме сообщений об ошибках).
Так вот там кто-то советовал несколько сервисов, которые проводят такое нагрузочное тестирование.

Вообще наиболее полезной ссылкой по теме нагрузочного тестирования оказалась эта — тут перечисленны и утилиты типа JMeter, и сервисы по организации тестирования. на первых трех я и остановлюсь чуть подробнее

Совсем по-быстренькому?


Если совсем по-быстрому — то это Load Impact — не надо никаких регистраций — заходите — даете URL — и в течении 10-15 минут 50 виртуальных пользователей терроризируют вашу страницу. Тупо, просто — но по крайней мере позволит увидеть что при первом же наплыве ваше приложение не ляжет. Не легло? Идем дальше

Нагрузочное тестирование за 1.5 часа


Мне очень понравился LoadStorm. С ним работа строится следующим образом:
1. регистрируемся
2. Создаем тест — в котором указывает сайт который будем пытать
3. Прежде чем начать пытку- требуется верификация (а вдруг вы хотите положить сайт конкурента????). надо на главную страницу положить определенный текст с кодом — или файл с определенным именем в корень
4. Дальше создаем сценарий — при создании сценария описываем, как пользователь идет по вашему сайту, какие линки нажимает, можно засабмитить формы. Все достаточно интуитивно и понятно
5. потом говорим когда запустить
6. в назначенное время тест запускается, ждем 30 минут пока до 50-ти пользователей бродят по вашему сайту согласно вашим указаниям — и получаем отчет.

Да, 50 одновременных пользователей — это не совсем серьезно — даже на хаброэффект не потянет — но уже что-то. Надо больше — есть платная подписка (да — забыл сказать что все это бесплатно). В моем случае — 50 одновременных пользователей это та нагрузка, о которой я пока и не мечтаю в ближайшие несколько месяцев — так что мне было достаточно.

Вообщем на описание сценария из 15 последовательных страниц, ожидание запуска теста и ожидание самих результатов ушло порядка полутора часов, в результате я получил графики типа
image
На этом графике показывается как терзалась система — в моем случае максимально было 47 пользователей — и чуть более 3-ех запросов в секунду
Ну и самый интересный
image
Из которого следует — что если исключить максимальный пик в 5 секунд (в этот момент решил включиться Garbage Collector) — в остальном приложение вело себя хорошо — и не зависимо от количества пользователей — то есть — нагрузка в 50 пользователей сайт не нагружает — есть еще и запас хороший.

Понятно — что такое тестирование не совсем «серьезное» по выдаваемым результатам, да и 50 одновременных пользователей — нельзя назвать серьезной нагрузкой, но, учитывая потраченное время (полтора часа) и деньги (0 руб) — результат вполне адекватный. По крайней мере мы убедились что если с производительностью есть какие-то проблемы — в ближайшие месяцы мы ее все-таки не увидим

Чуть подлинней и подороже


Если хочется чуть более серьезного — можно попробовать BrowseMob — сам их не пробовал — отличие в том, что у них, вместе с виртуальными пользователями ваш сайт мучают реальные — но это и стоит дороже. В любом случае гляньте — может пригодится

Все, удачи, счастливых хаброэффектов!
+78
8 декабря 2009, 03:39
309

комментарии (40)

+6
Sma11erM1nd #
Запостить обзор на хабре и наблюдать за результатом, который скорее всего дойдет до падения сервера.
+1
nekt #
скорее всего? Что-то мне не верится.
0
MaXyC #
а я выдержал когда то в июне. 58 ребят одновременно заинтересовались блогом
+1
public_stark #
58 — это далеко не харбраэффект… ^_^ Придумайте идею интереснее, анонсируйте проект на Хабре и можете засекать с секундомером, сколько протянет Ваш сервер)
0
MaXyC #
есть куча идей. средств и единомышленников устал искать. как часто встречается фраза на хабре «никто не заинтересован в стартапе, если первые дивиденды будут не ранее чем через 3 года»
0
MaXyC #
58 — это далеко не харбраэффект… ^_^ Придумайте идею интереснее, анонсируйте проект на Хабре и можете засекать с секундомером, сколько протянет Ваш сервер)


но все же первое и маааленькое, но достижение. =)
0
pcmaniac #
Как показала практика — коммент со ссылкой — это 100-150 уников в первые сутки и 50-100 во вторые, а вот интересный пост и правда может сгенерить несколько тысяч, а то и десятков тысяч, основная масса коих придётся на момент выхода топика на главную.
+1
VanDamM #
спасибо за пост, перенесите его плиз в блог высокой нагрузки
+3
AndrewTishkin #
Если совсем по быстрому — то это Load Impact

Ага, как бы этот сервис по-быстрому второй раз не накрыть хабраэффектом, а то на днях они и так уже получили порцию :)))
0
greendog #
Хех!
Смотрю LATEST FREE TESTS
Дык все почти на .ru :)
+1
Smerig #
есть ещё одно приложение, которое я использовал для нагрузочного тестирования в рамках локальной сети. Бесплатно оно работает до 30 дней, с возможностью имитации 10 пользователей (или больше, уже точно не помню). Если запускать тест с нескольких компов, то можно добиться желаемого хЭффекта.
Название — WAPT

Есть возможность генерировать запросы к формам.
В конце теста можно посмотреть графики и т.п. и т.д.
+1
andoriyu #
блин, у меня все упирается в ширину канала :) поэтому не могу объективную проверку конфигурации системы сделать :( PS. чем можно канал потестить из консоли?
0
zar0ku1 #
iperf
–1
bondbig #
iperf
+1
bondbig #
Мда, страничку нужно обновлять, перед тем как постить :)
0
Bonzo #
Спасибо, думаю будет полезно для теста маленьких shared hosting проектов
+1
makulia #
Хороший сервис, я пробовал воспользоваться бесплатным вариантом(одновременно до 50 пользователей) для оценки производительности моего веб-сайта, написанного на Grails
+2
vvk #
Интересно, сколько народу зайдет на loadimpact.com и введет адрес Хабры.
+1
vvk #
Хотя уже:
This configuration contains addresses that has been tested too many times the last 24 hours. The offending domain was: habrahabr.ru
+2
Akademic #
Я использовал curl-loader.
Это написанное на C консольное приложение, которое эмулирует работу пользователей на сайте по написанному сценарию. Может логиниться, посылать формы. Легко запустить на нескольких компьютерах. В конце работы выводит табличку со статистикой по каждому запросу.

Единственное, что оно просто скачивает странички, т.е. не трогает css, js, картинки, если их загрузка не включена в конфиг (я написал конфигуратор, который сделал это для меня).
+1
akakunin #
JMeter в туже степь — только наверное все-таки мощнее

Но эти все утилиты требуют скачивания, установки, настройки, написания скриптов — не всегда интуитивно понятное.

То есть — в полтора часа даже на простенький тест — вряд ли получится уложится
+1
Akademic #
У меня много времени ушло на поиск утилиты.
Настройка curl-loader заняла гораздо мнеьше времени, чем полтора часа.
В нём есть готовый конфиг, в котором я раскопировал секцию определения ссылки для захода пользователя и зменил URL на свои.

Хватило прочтения
curl-loader.sourceforge.net/doc/fast.html
и
curl-loader.sourceforge.net/doc/faq.html#conf-file-details

Впрочем, каждый выбирает по себе.
0
NickyX3 #
loadimpact.com/result/reborn.ru-838e0cd4d05105030a0fdb36013ae032

я хз как и че они там тестируют — мы даже не заметили.
и без них 120 req/sec с утра, к вечеру будет больше.
0
MaXyC #
да я те говорю гон какой то

loadimpact.com/result/maxyc.ru-d323c68b5dd14d36446f0041b0491702

вот лог вордпресса
gyazo.com/03837abda3c86c0e1002b42f60ded575.png

вот лог лоадимпакта во время работы (как минимум 1 подключение есть. а лог не то что гостя. даже бота не заметил)
gyazo.com/fb381d1bfbe4d0c4094ceb94b55ed375.png

поглядел данные из webalizer. тот надо мной поржал и сказал «самдурак. никого здесь не было.»
0
akakunin #
У меня в обоих случаях — и тестировании LoadIMpact-ом и LoadStorm-ом — Google Analytics их никак не отобразил
Но LoadStorm сервер точно грузил
0
AirLight #
Google Analytics и не должен считать ботов, он реагирует только на браузеры со включенным JS
+1
akakunin #
На ЛоадИмпакте есть небольшой хелп с расшифровкой графиков.
Если у вас график плоский — значит приложенная нагрузка «не нагрузила» сайт — есть еще свободные ресурсы.
Это ине удивительно — в LoadStorm-е 50 пользователей генерили чуть более 3-ех запросов в секунду (тут я думаю столько же примерно) — если у вас 120 запросов в секунду — это норма — то вам эти тестовые 50 пользователей — как слону дробина.

Раскошелитесь на 5000 одновременных пользователей — тогда может и увидите для себя что-то интересное
0
NickyX3 #
нам столько не грозит. 15к уников в сутки — это немного вообще. По основному адресу около 2м запросов в сутки, что около 20 запросов в сек в среднем, хотя конечно ночью можно сказать нет никого, а днем и под вечер до 200 доходит. Это я не считал правда субдомены, форум и тяжелый контент — только скрипты и оформление.
0
sir_Jack #
Очень интересно было прочитать… ) давно-давно когда приходилось оценивать максимальную нагрузку на сайт использовал OpenSTA… :) с тех пор появилось много вкусного :)
Спасибо за просветление :)
+2
sunnybear #
интересно, loadimpact снова упадет? :)
+2
crocodile2u #
Вот еще полезная утилита: acme.com/software/http_load/
Ну и конечно, ab.
0
viperet #
Когда то пытались использовать Liferay в одном довольно крупном прокте, тогда нагружали его с помощью http_load — простой утилитки, которая тянет список урлов с заданной частотой заданное время. Результаты были плачевные для Liferay.
Я конечно очень надеюсь, что сейчас с этим движком все намного лучше, но год назад при тестировании мы выявили, что 90% времени он занимается парсингом XML — там все строки, даже надпись OK на кнопке где нибудь в интерфейсе, хранились как XML документы в БД в поле типа TEXT, сделано это было для поддержки i18n, и каждый раз когда выводилась любая строка — она запрашивалась из БД, XML парсился и выводился
+1
akakunin #
из-за чего и решили погонять сейчас. В текущей версии (5.2.3) все ресурсы точно не в базе (в properties-файлах как и положено), 50 одновременных пользователей портал запущенный на самом маленьком амазоновском инстансе держал без проблем и без серьезной загрузки — так что и больше должен держать.

Видимо все-таки учли ошибки
+2
public_stark #
Почему бы не упомянуть о классике нагрузочного тестирования? HP LoadRunner на высоте по всем характеристикам, кроме цены)
+3
akakunin #
У нас на работе еге как раз и используют — но это относится (имхо) к «серьезному» и «правильному» тестированию — но, оно требует (как вы правильно заметили) других денег и другого времени
0
Sapiens #
Вы уж товарищи простите конечно, но! Ваш сценарий теста можно написать и на Jmeter с проксей быстрее чем за час. Да и пользователей выставить значительно больше. Какая то странная боязнь таких инструментов пошла…
+1
akakunin #
С нуля у меня час ушел на только на то что-бы скачать поставить JMeter и дернуть одну страницу.
Пользователей можно и 1000 поставить — только дергать 1000-ю пользователями с одного компа по моему бесполезно — все может упереться в канал на стороне клиента — а тот же LoadStorm по крайней мере утвержждает что они с разных источников дергают (хотя не проверял)
+2
Sapiens #
из крайности в крайность? между 50 и допустим 200 разница уже будет огромной. По поводу канала на стороне клиента посмотрите Jmeter Remote Testing.
P.S. Вашу позицию понял, но ее не разделяю :)
0
BFox #
В таком случае еще можно использовать Siege, в файл можно добавить список страниц которые нужно обойти, плюс включить переход по случайным страницам
0
questor #
hint as Captain Obvious: Load Impact и LoadStorm запущенные одновременно дают 50+50 пользователей одновременно. Правда, с графиками тяжелее приходится. Но мы же о халяве за полтора часа?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.