Нагрузочное тестирование с 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. Это может произойти, если между клиентом и сервером существуют другие стороны, например, наивные подсистемы балансировки нагрузки (мой случай).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.