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

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

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


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

    Все, удачи, счастливых хаброэффектов!
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 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 пользователей одновременно. Правда, с графиками тяжелее приходится. Но мы же о халяве за полтора часа?

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