Нагрузочное тестирование с ложными неудачными запросами AB (длина)

Чтобы провести нагрузочное тестирование, я из собственного любопытства запустил на своем сервере:

ab -kc 50 -t 200 http://localhost/index.php

Это открывает 50 соединений keep-alive на 200 секунд и просто забивает мой сервер запросами на index.php

В своих результатах я получаю:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

Обратите внимание на 32951 «неудачный» запрос. Я не могу понять этого.

Во время выполнения теста я мог без проблем получить доступ к своему веб-сайту с домашнего компьютера, хотя время загрузки страницы в нижней части страницы было указано как 0,5 вместо обычного 0,02. Однако у меня ни разу не было неудавшегося запроса.

Так почему же AB сообщает, что половина соединений терпит неудачу? И что в этом контексте означает «Длина:»?


person Community    schedule 23.02.2009    source источник
comment
Есть ли на вашем сайте балансировщик нагрузки? См. Мое сообщение в блоге о нагрузочном тестировании с балансировщиками нагрузки, что могло бы объяснить ситуацию, в которой он работает для меня при нагрузочном тестировании.   -  person Patrick Lightbody    schedule 24.02.2009


Ответы (3)


Ничего. «Сбой длины» просто указывает на то, что примерно в половине случаев длина ответа была другой.

Поскольку содержимое динамическое, вероятно, это идентификатор сеанса или что-то в этом роде.

person Community    schedule 23.02.2009
comment
Эй, я только что столкнулся с той же проблемой и рад, что здесь был ответ. Спасибо! - person Richard Hurt; 17.07.2009
comment
Я тоже! Разве они не могут назвать это чем-то, кроме провала !? - person scotts; 05.09.2009
comment
Спасибо за ответ, точно так же сомневаюсь. - person Saiyine; 20.06.2010
comment
Да, два года спустя этот ответ все еще действительно полезен. - person Sergi; 30.03.2011
comment
Да! Вот почему я ТАК люблю. Только что узнал о ab, и я не нашел этой информации на странице руководства. - person snapfractalpop; 17.03.2012
comment
Не спешите приписывать это несоответствию длины содержимого. ab не сообщает о коде состояния HTTP 500 как об ошибках в своей сводке. Причина несоответствия длины может заключаться в реальной ошибке. Вы можете использовать -v 4, чтобы получить больше информации (лучше перенаправить к файлу, так как будет много распечаток). - person Tal Lev-Ami; 22.05.2013
comment
Если вы хотите быть уверены, что все они имеют код 200, вы можете сделать что-то вроде ab -n 100 -v 2 https://your-calendar.com/pages/home | egrep "Status|Failed" | sort | uniq, который напечатает, например. Неудачные запросы: 4 Статус: 200 ОК - person Confusion; 13.05.2014
comment
Примечание для Tal Lev-Ami: ab показывает ответы, отличные от 2xx. Он конкретно не сообщает вам, что это такое, но в приведенном выше примере нет строки с ответами Non-2xx: мы можем предположить, что ошибок 500 не было. - person Michael Bissell; 13.11.2014
comment
На самом деле это объясняется в руководстве ab здесь http://httpd.apache.org/docs/current/programs/ab.html Если длина документа изменяется во время тестирования, ответ считается ошибкой. - person Захар Joe; 14.02.2015
comment
6 лет спустя, все еще очень полезно - person GreenScape; 17.06.2015
comment
Спустя 8 лет и все еще полезно. - person DarthVader; 19.07.2017
comment
Может ли кто-нибудь помочь мне понять, что количество запросов в секунду также включает запросы на сбой? - person Zaheer; 21.11.2019

Другими словами, чтобы описать проблему:

Инструмент тестирования apache (ab) предполагает, что длина содержимого ответа будет одинаковой в течение всего теста. Он хранит длину содержимого первого ответа. Если какой-либо из дальнейших ответов имеет другую длину содержимого, они приводят к «ошибкам длины».

Следующий отчет об ошибке apache, похоже, подтверждает, что: Ошибка 42040 ASF

Резюме. Если вы обслуживаете какой-либо контент переменной длины, вам, вероятно, следует игнорировать такие ошибки запроса ab.

Изменить: недавно я заметил, что команда ab имеет новый (по крайней мере, для меня) параметр:

-l   Accept variable document length (use this for dynamic pages)

Я вижу его в ab версии 2.3 ‹ревизия $: 1528965 $›, но не вижу его в ab версии 2.3 ‹ревизия $: 655654 $›, так что это было наверное добавили относительно недавно.

person Dariusz Walczak    schedule 11.10.2011
comment
Для любого, кто пользуется Mac, скорее всего, ваша версия ab отстает, и -l не сработает. Вы можете установить из исходного кода или через homebrew, но brew install ab не работает, потому что это часть пакета apache - вы можете установить с помощью brew install homebrew / apache / ab. - person netpoetica; 05.01.2015

Извините, что повторно задаю старый вопрос, но он был первым, который возник в Google. Иногда ошибка длины, о которой сообщает ab, могла быть вызвана реальной проблемой: если соединение было закрыто на стороне сервера до того, как общий объем байтов, объявленный в заголовке Content-Length, не был получен клиентом. Это может произойти, если между клиентом и сервером есть другие стороны, например, наивные вручную созданные балансировщики нагрузки (мой случай).

person zentrunix    schedule 24.09.2013