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

209

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

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

Вениамин
источник
Есть ли на вашем сайте балансировщик нагрузки? Посмотрите мой пост в блоге о нагрузочном тестировании с балансировщиками нагрузки, который может объяснить ситуацию «это работает для меня» в нагрузочном тестировании.
Патрик Лайтбоди

Ответы:

361

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

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

Джефф Этвуд
источник
8
Эй, я просто столкнулся с той же «проблемой» и рад, что этот ответ был здесь. Thanx!
Ричард Херт
2
Спасибо за ответ, у меня были точно такие же сомнения.
Сайин
63
Да, спустя два года этот ответ все еще действительно полезен.
Sergi
11
Не спешите приписывать это несоответствиям переменной длины содержимого. ab не сообщает код состояния HTTP 500 как ошибки в своем резюме. Причиной несоответствия длины может быть то, что у вас есть настоящая ошибка. Вы можете использовать -v 4, чтобы получить больше информации (лучше передать в файл, так как будет много распечаток).
Таль Лев-Ами
3
На самом деле это объясняется в руководстве ab здесь httpd.apache.org/docs/current/programs/ab.html «Если длина документа изменяется во время тестирования, ответ считается ошибкой».
Захар Джо
132

Чтобы описать проблему другими словами:

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

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

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

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

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

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

Дариуш Валчак
источник
4
Для любого на Mac, скорее всего, ваша версия ab отстает, а -l не возьмет. Вы можете установить из исходного кода или через homebrew, но «brew install ab» не работает, потому что он является частью пакета apache - вы можете установить его с помощью «brew install homebrew / apache / ab».
netpoetica
8

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

zentrunix
источник