Как стать автором
Обновить

Комментарии 35

Спасибо!
А какие цифры и в каком отчете будут указывать на пиковую нагрузку, которую выдержал сервер?
Например количество пользователей на сайте одновременно, которое потянет сайт.
Здесь понятие пиковой нагрузки, как таковое, отсутствует.
Вы сами задаете количество потоков и различных запросов к веб-сайту.
И дальше смотрите, среднее время, с которым отдаются страницы. Среднее время можно смотреть через элемент Summary Report. Если это время укладывается в ваши требования, можете поднять нагрузку и продолжить тестирование. Если нет, то считайте, что максимальную нагрузку для своего сайта вы определили, и пора заняться оптимизацией :)
Как только я вижу букву J в названии софтины, занимающейся нагрузочным тестированием, так сразу же у меня опускаются руки: Пока ни одной софтиной, написанной на Java, мне не удалось создать достаточной нагрузки, используя только один компьютер.
Скажите пожалуйста — какова производительность этой софтинки?
Сколько запросов в секунду она может генерировать на такой железке, как Core2Duo?
Проц не имеет значения, на компе, посылающем запросы ничего не обрабатывается
Наверное я что-то делаю не так.
Угадайте — когда был запущен тест?
content.foto.mail.ru/mail/ilvin/_myphoto/s-1331.png

По моему разумению этот тест покажет неверные результаты, т.к. тестирующей софтине явно не хватало процессора.
Правда? И память тоже? А если посылать на сервер гигабайтные файлы?

2011/08/10 19:30:02 ERROR - jmeter.threads.JMeterThread: Error processing Assertion java.lang.OutOfMemoryError: Java heap space
at java.lang.String.toCharArray(String.java:2725)
at org.apache.oro.text.regex.Perl5Matcher.contains(Unknown Source)
at org.apache.jmeter.assertions.ResponseAssertion.evaluateResponse(ResponseAssertion.java:343)
at org.apache.jmeter.assertions.ResponseAssertion.getResult(ResponseAssertion.java:189)
at org.apache.jmeter.threads.JMeterThread.processAssertion(JMeterThread.java:609)
at org.apache.jmeter.threads.JMeterThread.checkAssertions(JMeterThread.java:580)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:359)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
at java.lang.Thread.run(Thread.java:662)

2011/08/10 19:30:05 ERROR - jmeter.threads.JMeterThread: Test failed! java.lang.OutOfMemoryError: Java heap space
at java.io.ByteArrayOutputStream.(ByteArrayOutputStream.java:60)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.readResponse(HTTPSamplerBase.java:1456)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.readResponse(HTTPSampler.java:288)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:516)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:965)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:951)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:348)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
at java.lang.Thread.run(Thread.java:662)
Подождите, а кто сказал, что нагрузку нужно создавать непременно с одного компьютера?! Полноценный тест на нагрузочную способность с одной машины сделать очень сложно, да и нужно ли…
Если говорить о Jmeter, то тут можно записать тест, создать батник по запуску этого теста из командной строки (JMeter это позволяет), и запускать батники с разных компьютеров. Можно для каждой машины свой тест записать.
А по поводу производительности софтинки, однозначно быстрее, чем Load tests в Visual Studio 2010, разница заметна просто-таки невооруженным взглядом. Что касается других инструментов, то непосредственного сравнения не проводил, но думаю, что либо наравне, либо по-быстрее, всё-таки контора Apache как ни как.
И учтите, что производительность этой тулзы на 99% зависит от пропускной способности канала, а не от железа самой машины. Я запустил ее на том серваке, где был развернут веб, так запросы стала слать почти со скоростью света :)
Спасибо огромное, вскоре очень понадобится это (я надеюсь).
По поводу эмуляции параллельных запросов на разных машинах — насколько это потом удобно? Это же ведь нужно делать максимально синхронно (благо, Шедулер есть), и потом ещё анализировать результаты с разных машин и сводить вместе. Нет ли какого-нибудь плагина для него (или чего-нибудь стороннего), что позволит свести такие разбросанные отчеты в один? Или управлять централизованно с помощью какой-нибудь сетевой службы работой JMeter на разных машинах?
Я не склонен впадать в трепет при слове «Apache», когда есть nginx. :)
И вопрос не в канале, т.к. он равен 1 гигабиту и полностью не выбирается во время тестирования.
Вопрос в другом — почему у меня на Windows машине эта конкретная софтина не показывает «скорости света», а выбирает весь процессор?
content.foto.mail.ru/mail/ilvin/_myphoto/s-1331.png
Что я делаю не так?
Конечно, ферма тестирующих серверов — это круто. Но почему для того, чтобы протестировать на производительность один дохлый тестовый сервер на P4, нужно городить ферму из Core2Duo?

При этом интерфейс настройки тестов мне очень нравится. Я хочу использовать эту софтину, но не могу по причине недостаточной производительности.
Научите меня — что нужно поднастроить в этой софтине для получения максимальной производительности. Может у нее есть функция предкомпиляции тестов?
Если вы использовали nginx, или хотя бы видели, как и где его используют, то вроде как должны знать, что он предназначен в первую очередь для того, чтобы отдавать статику. Сравнивать с Apache его просто бессмысленно. К тому же надо отметить, что один другому не мешает, а наоборот прекрасно дополняют друг друга, чего не сказать, например, о связке IIS + nginx.
По вашему вопросу, попробуйте установить софтину на тот же компьютер, где развернут веб, и тогда возможно что-то прояснится. К слову сказать, канал может быть зажат. Я же не знаю, что у вас там за сетка, и кто и как ее администрирует.
Не обижайтесь — я не хотел Вас обидеть.
Присмотритесь — там есть смайлик.
попробуйте установить софтину на тот же компьютер, где развернут веб

Что мы в этом случае тестируем и и какова ценность результатов, которые мы получим?
JMeter не такой уж легковесный как кажется и создает очень даже не хилую нагрузку, особенно при большом кол-ве потоков. Ибо ему надо генерировать, отправлять, получать и обрабатывать запросы и ответы. Тормозов добавляют различные View Results Tree, Summary Report и прочие, поэтому дял эмуляции нагрузки от большого кол-ва пользователей потребуется больше одной машины.

PS
View Results Tree полезен только на этапе отладки сценария, при нагрузочном он без полезен — нет возможности просматривать тысячи результатов, и даже вреден, т.к. создает достаточно заметную нагрузку.

PPS
В свое время замечал, что под линухом JMeter работает заметно быстрее чем под виндами.
Да, когда сценарий тестов полностью подготовлен, можно запускать JMeter в консольном режиме без каких-либо отчетов. Об этом сказано в разделе Best practices у них на сайте: jakarta.apache.org/jmeter/usermanual/best-practices.html
Бро, это не тупая флудилка, это мощный инструмент для проведения как функционального, так и нагрузочного тестирования. Для нагрузочного нужна ферма.
А как вы ее запускаете, и расскажите больше про свое окружение в котором оно работает.
1) Windows Vista
2) KAS (к сожелению не могу его пристрелить — прав нет)
3) >java -version
java version «1.6.0_26»
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
4) Запускаю двойным кликом по ApacheJMeter.jar
5) Памяти все это безобразие кушает 300Мб
6) Тестирование — 100 тредов на 100 000 запросов одной единственной страницы.
7) После запуска JMeter оба ядра процессора под 100% нагрузкой.
Похоже, что эти рекомендации должны быть в этой статье на самом почетном месте!
Jmeter умеет кластеризоваться, т.е. можно создать ферму нагрузочных машин, управляемых как единое целое.
Спасибо за информацию, не знал, почитаю про это.
Спасибо! Это и было интересно )
На P4 3.0 HT, то есть ДО Core оно выдавало 200 реквестов в секунду. Потом висло. Правда версия была 2.3.1
Что-то странное, похоже что памяти не хватало оперативной, у нас stage сервер постоянно посылается, что-то около 500 запросов в секунду и нормально работает час или больше. Второй вариант, что-то не так с тестами.
2 гига было на стандартной в общем т одесктоп машине тех времен
блин, заигрался нагрузочным тестированием и пропустил обед :)

спасибо большое за статью!
Там картинки не все грузятся, судя по всему хостинг не очень шустр. Можете перенести их на более надежный?

А за статью спасибо!
сейчас они загружены на радикал.
А какой по-надежней?
Ну я думаю, что тут все одобряют habrastorage.org. Вроде он как официальный даже.
За картинки к статьям на радикале надо карать.
Сравните убогий интерфейс JMeter с возможностью записи кликстрима в Tsung. Или хотя бы с дружелюбным форматом Selenium'а. Или с возможностью последнего кликать с разных «агентов».

Вцелом — ужасающая тулза, с уймой недостатков.
Вот спасибо за наводку на очень интересный продукт!
За эту ссылку и расстрелянной кармы не жалко! :)
Посмотрел на Tsung, кроме чуть более лучших графиков ничего интересного не заметил. А вообще, обсуждать интерфейс подобных инструментов — последнее дело. Ведь в конечном счете они запускаются из консоли.
А что там в цунге такое клёвое в рекордере? Типичный прокси, как и в джиметре.

Что касается селениума — это да, для аякс-приложений делать генератор нагрузки на джиметре или подобном инструменте это жесть. Однако для селениума ферма нужна вообще здоровенная, на одной машине больше десятка браузеров (то есть фактически виртуальных пользователей) не запустишь. Хотя можно использовать BrowserMob вместо фермы, генерировать нагрузку из облака, но для интранет-приложений такой способ не катит.
Обратите внимание сюда, там есть еще вкусные listener-ы.
Благодарю за статью, но лично у меня сложилась вот какая ситуация:

Есть сайт, развернутый в локалке, выдаем нагрузку на одну страницу в 1000 пользователей, которые постоянно на нее ломятся в течении минут 20-ти, при этом получаем 1100-1200 обрабатываемых запросов в секунду и в итоге под конец теста получаем порядка 300 эрроров:

java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:483)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:965)
at org.apache.jmeter.protocol.http.sampler.AccessLogSampler.sampleWithParser(AccessLogSampler.java:165)
at org.apache.jmeter.protocol.http.sampler.AccessLogSampler.sample(AccessLogSampler.java:183)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:348)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
at java.lang.Thread.run(Unknown Source)

При этом проц компа заргужен на 20-30%, сервака — 60%, причем значительную часть сервака грузит sql service (порядка 30%), в канал ничего не упирается.

Если же запустить WCAT с теми же самыми данными, то количество обрабатываемых запросов увеличивается в 3-4 раза, загрузка проца компа и сервака снижаются примерно в 2 раза, причем sql service практически ничего не отжирает и нет никаких эрроров.

Какой из данных тестов врет и почему? Как это выяснить?

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