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

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

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

Это открывает 50 поддерживающих соединений на 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 сообщает, что половина соединений терпит неудачу? И что в этом контексте означает «Длина:»?

Ответов (3)

Решение

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

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

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

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

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

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

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

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

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

Я вижу это в ab Версия 2.3 <$ Revision: 1528965 $>, но не вижу его в ab Version 2.3 <$ Revision: 655654 $> , поэтому, вероятно, он был добавлен относительно недавно.