Внедряю Liferay
0,0
рейтинг
8 декабря 2009 в 03:39

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

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

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


На сегодняшнем стендапе Марек (программист из Польши принимающий участие в проекте 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 — сам их не пробовал — отличие в том, что у них, вместе с виртуальными пользователями ваш сайт мучают реальные — но это и стоит дороже. В любом случае гляньте — может пригодится

Все, удачи, счастливых хаброэффектов!
@akakunin
карма
124,0
рейтинг 0,0
Внедряю Liferay
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

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


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

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

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

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

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

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

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

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

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

      loadimpact.com/result/maxyc.ru-d323c68b5dd14d36446f0041b0491702

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

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

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

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

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

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