Pull to refresh

Comments 68

<request><http url="/test/test.html" version="1.1" method="GET"/></request>

я так понимаю, можно использовать и POST запросы. а как передавать данные в POST?
manual

<request>
       <http url="/bla" method="POST" version="1.1" contents="bla=blu&name=glop">
</request>
UFO just landed and posted this here
UFO just landed and posted this here
Ага, у нас на проекте используется wcat. Основная причина почему мы его используем — это его возможность генерации результатов в формате xml и наличие xsl файла в комплекте, который позволяет просматривать html отчет (хотя и без графиков) в аккуратном виде. Html — потому что потом это было легко интегрировать в автоматическую рассылку. Подобной возможности не было найдено в JMeter. Насколько я знаю JMeter так же не умеет захватывать счетчики производительности на удаленном сервере (поправьте если я ошибаюсь).

Как обстоят дела с этим у Tsung?

Из минусов wcat — отсутствие возможности наращивать количество пользователей во время теста.
Tsung предоставляет и html отчеты, я обновил пост по отчетам. У Tsung есть собственный измеритель произодительности, на счет захвата счетчика производительности на удаленном сервере в документации не нашел ничего.
Есть плагины для jmeter на гуглокоде, там насколько знаю есть возможность хватать метрики с нагружаемых серваков. Хотя никогда по этому поводу не заморачивался, и использовал метрики, записанные осью или сторонним софтом.
Расширяемость продукта есть? Работа под другой осью? Расписания? Генерация данных и анализ ответов?
ось только *nix (Linux, BSD, MacosX, Solaris), расписаний и генераций данных не замечал, ответы можно из ответа посмотреть по статистике ошибок, что вы подразумеваете под расширяемостью?
Расширяемость это значит к примеру написать свой протокол, или сложную реализацию сценария. В jmeter к примеру есть для этого специальный интерфейс. Пока из описания продукта вижу, что он написан на функциональном языке что в теории даст большую производительность. Все остальное, что могут предоставить другие инструменты, либо не превосходит либо совсем отсутствует (отсутствие генерации разных запросов это гигантский минус). Да и высокая производительность плюс с натягом. Это разве что тестировать со слабой машины продукты, предназначенные для высокой нагрузки (сотни тысяч запросов в час). В общем, софтина получается применима далеко не везде и не всегда.
Ну и еще вопрос, оно сохраняет данные по запросам (цифры хотя б) в файлы или только графики само строит?
На счет расширяемости я наверно не так осведомлен, наверно в теории вы можете написать протокол на erlange. На счет генерации разных запросов это либо вручную прописывать либо через прокси, на лету я как понял нельзя модифицировать запросы, а зачем вам в принципе это потребовалась?
Да, данные по запросам есть в логе.
Ну если он еще с открытыми исходниками, то конечно в теории можно, вопрос насколько это просто)
Про генерацию на лету, самый простой пример. Как вы без неё будете логинить юзера? Вы же не подсунете ему идентификатор сессии в запрос.
обычный post запрос, и еще там есть таки возможность создавать данные динамически исходя из предыдущих запросов, с использованием
<dyn_variable>
Какие преимущества перед тем же JMeter?
я особо не изучал JMeter, но мне кажется там есть определённые ограничения на количество одновременных юзеров, и еще т.к. сделано на java соответственно ресурсов будет кушать больше
У Jmeter ограничения только ресурсы машины, но даже несмотря на несколько большие требования (с тем же LoadRunner в сравнении он вообще дистрофик) проблем с этим не было ни разу даже при тестировании высоконагруженных промышленных систем. В крайнем случае можно использовать распределенный режим нагрузки.
Ну к примеру для 1млн юзеров, это же какой сервер нужен будет для запуска Jmeter? Для скольки юзеров у вас получалось запускать Jmeter?
Миллион юзеров нужен почти никогда. Софт каждого виртуального юзера представляет одним потоком. Когда он выполнил свое действие, то поток не убивается, а используется повторно. Убивать сам поток смысла не имеет раз, а затраты системы на создание нового довольно существенны (вне зависимости от языка) — это два. Поэтому разговор при нагрузке идет не о миллионах пользователей, а о количестве запросов в единицу времени. Могу на личном опыте привести пример. SFTP протокол (шифрование, это дополнительная нагрузка на систему), файлы генерируются на лету и имеют размер около 5кб. С рабочего ноута нагрузку можно было создавать 200-250 запросов в секунду. Обычный хттп уходит за тысячу, максимум не смотрел, ибо и тысячи не надо было.
>а затраты системы на создание нового довольно существенны (вне зависимости от языка) — это два.

фраза ошибочна, ОСОБЕННО в контексте ERLANG ;)

>Обычный хттп уходит за тысячу, максимум не смотрел, ибо и тысячи не надо было.

вам не надо было, а если бы и надо — то не смогли бы решить, инструмент не позволит.

tsung — позволит, но вам похоже это не светит (ибо у вас уже все хорошо, и больше не надо, ну никому и ни при каких условиях)
фраза ошибочна, ОСОБЕННО в контексте ERLANG ;)
Не путайте операцию выполняемую операционной системой и расчеты, может для второго функциональные языки и прекрасны, но первое не в их власти. Каждый поток требует выделения ресурсов, и хотел бы я посмотреть как 1млн потоков будет жить одновременно на банальной рабочей тачке.

вам не надо было, а если бы и надо — то не смогли бы решить, инструмент не позволит.

tsung — позволит, но вам похоже это не светит (ибо у вас уже все хорошо, и больше не надо, ну никому и ни при каких условиях)
Спрячьте свой фанатизм, и не приписывайте мне своих домыслов. Там не написано что не смог бы, вопрос в том сколько надо. 1000000 юзеров это не показатель. За какое время этот миллион набегает?
Может я что-то упустил, но разве сабж создает поток на каждый запрос к удаленному серверу?
У меня сложилось такое ощущение из слов рассказывающих. Они говорят про миллион юзеров, говорят что никто так не сможет и не говорят за какое время. Надо будет спросить на работе можно ли выложить презенташку для стажеров по нагрузке, а то лень самому рисовать картинки.
Там на каждого пользователя заводится процесс виртульной машины, они не соответствуют тредам ОС. Чисто внешне (если смотреть strace) это выглядит как программа написанная с использованием мультиплексного ввода-вывода (select/poll/epoll и т.п., что именно зависит от ОС)
>Миллион юзеров нужен почти никогда

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

Ну хоть бы сказали за что минус…
А все юзеры одинаковые? Нельзя, сажем, для пост-запросов брать логины/пароли из файлика?
можно,
из файлов, из базы — это то что есть готовое
Зер гут :) Тогда интересно, а то насколько быстро nginx будет отдавать статический контент мало интересно, когда подавляющее большинство строго персонализировано.
Разный IP нужен крайне редко при нагрузке, по словам коллег еще ни разу не пришлось пользоваться в работе. А вот использовать разные данные в запросе надо часто.
я ошибался оказывается есть поддержка считывания из файла,
 <option name="file_server"  value="/tmp/userlist.csv"></option>
разные IP нужны при наличии балансировки нагрузки
просто у ВАС нет такой необходимости, видимо маленькая система.
пом никсами tsung позволит использовать сотни IP на одной машине.
Я вас растрою наверно но спуфинг айпишников есть во многих инструментах (и о боже, даже под виндой).
Разные ip полезны когда проверяешь различные лоадбалансеры и jmeter прекрасно справляется благодаря нескольким клиентам. А вот отсутствие загрузки кастомных данных… Тут и httperf справится :-)
а тут на ОДНОМ клиенте :)
Просто не было необходимости делать это на одном хосте — в jmeter можно наконфигурить все ip адреса которые есть на хосте, правда (сходив по ссылке), наверно менее элегантно чем в tsung.

Ушел изучать tsung %)
понятно что это нужно только при ОЧЕНЬ высоких нагрузках
для таких случаев и нужно много IP и очень много клиентов
в общем всего много :)
и кластер для tsung делается ОЧЕНЬ просто
но это опять про очень высокие нагрузки

и да, гуя нету совсем
и надо уметь читать логи
и надо понимать как работает HTTP
и надо понимать как ТОЧНО работает ваше приложение
Это все не проблема, понравился подход tsung к мониторингу что в одном месте собрана статистика с сервера (cщpu, mem, etc.) и привязано к результатам нагрузки.
А так как весь парсинг логов/результатов отдан на откуп пользователю — можно удобно сделать историю нагрузок
Так, а как график то генерировать? Почему-то в папке с логами никаких Perl скриптов нет.
у меня скрип лежал кажется в /usr/local/lib/tsung/bin/tsung_stats.pl, то есть куда установился
jmeter позволяет парсить ответ сервера, выдергивать оттуда нужные данные и подставлять в следующий запрос (часто нужно для ajax запросов). Умеет ли делать это цунг?
Видно, что штука отличная. Но ему бы какой-нибудь DSL для конфигов не помешал. XML как-то не очень смотрится.
я вот смотрю вы прописываете статику

а он сам может подтягивать всю статику со страниы? без описания
ммм боюсь что нет, иначе зачем тогда нужны эти манипуляции с прокси
а даже если и делать, то не через make install, а через checkinstall
ну я предоставил универсальный вариант:), если честно я не заметил их
tsung интересная штука, но его графики/цифры сильно зависят от того как настроена сессия пользователя. В итоге довольно важно качество составления теста и правильная интерпретация результатов тестирования, это еще отдельная задачу.

Более простые инструменты (вроде Apache Benchmark) имхо дают более простую и понятную оценку.
Он же долбит один и тот же запрос в цикле из n-потоков. Или я что-то упускаю?
Все так. Зато, после составления сценария, вы получаете реальный ответ на вопрос:
«СКОЛЬКО ЮЗЕРОВ ПАРАЛЛЕЛЬНО МОГУТ РАБОТАТЬ НА САЙТЕ?»
А не можете поподробнее рассказать про симуляцию разной статистики использования. По xml видно, что как-то вероятность можно задать поведение, но хотелось бы big picture.

Можно ли брать адреса запросов или какие-то параметры из файлов/БД? Как их ожно ассоциировать с сессиями?

В JMeter основная проблема большая костыльность симуляции более-менее правдоподобной нагрузки.
Это тема отдельной статьи, правда не знаю когда, сейчас довольно много чего нужно изучать…
Tsung прекрасен! Обожаю его!
Из минусов:
1) Max размер XML сценария 64K
2) Тяжелый в инсталляции
3) Только UNIX
Теперь о плюсах:
Мне удалось выжать на нем с одного компа до 12000 http-соединений к тестируемому серверу. Хотя декларируют до 24000.
Есть поддержка кластеризации. Правда в кластере с одной машины больше 8000 соединений нельзя получить.
Можно писать функции на erlang и вызывать их из сценария.
Умеет разные протоколы.
А ему можно передать 150 миллионов URL, чтобы он по ним рандомно стучался?
Напрямую нельзя, но можно сделать свою функцию на эрланге и вызывать ее из tsung'a
Смысла правда не вижу особого. Но вам виднее, канечно

Using dynamic parameter substitution
You can have tsung send dynamic data by calling user functions. To have tsung invoke user function, you need to place mark-up elements in the xml file. The docs are found here.

Example:

https://gist.github.com/izhar/67a52dfd75a3efde65b1
Нам для тестов такое понадобилось. В итоге сейчас это через wrk с небольшим ffi обвесом на его встроенном lua.
Ну, клева. И сколько параллельных потоков выжали?
Нам нужно было потестить большой кеш при получении файлов на несколько МБ каждый. Т.е. тестили утилизацию канала (throughput) при рандомном запрашивании такого достаточно большого числа файлов. qps небольшой: ~тысячи всего лишь.
Решение так себе, вот и стало интересно про tsung в таком ключе.

Нихрена не работает нельзя было нормальный файл для примера привести просто какие-то обрывки текста а не статья

Sign up to leave a comment.

Articles

Change theme settings