Завантажте тестування за допомогою 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 "невдалі" запити. Я не можу цього зрозуміти.

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

То чому АБ повідомляє, що половина з'єднань не працює? І що означає "Довжина:" у цьому контексті?


Чи має ваш веб-сайт балансир завантаження? Дивіться мій пост у блозі про тестування навантаження з балансирами навантаження, який може пояснити ситуацію "це працює для мене" при тестуванні навантаження.
Патрік Лайтбоді

Відповіді:


361

Не звертай уваги. "Провал довжини" лише вказує на те, що приблизно в половину часу тривалість відповіді була різною.

Оскільки вміст динамічний, це, мабуть, ідентифікатор сеансу чи щось подібне.


8
Гей, я просто зіткнувся з тією ж «проблемою» і радий, що ця відповідь була тут. Дякую!
Річард Херт

2
Дякую за відповідь, у мене були точно такі ж сумніви.
Saiyine

63
Так, через два роки ця відповідь все ще дуже корисна.
Сергі

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 <$ Версія: 1528965 $>, але я не бачу її в ab Версії 2.3 <$ Ревізія: 655654 $> , тому вона, ймовірно, була додана порівняно недавно.


4
Для будь-кого на Mac, швидше за все, ваша версія ab відстає, і я не прийму. Ви можете встановити з джерела або через homebrew, але "варити встановити ab" не працює, тому що це частина пакету apache - ви можете встановити за допомогою "brew install homebrew / apache / ab".
netpoetica

8

Вибачте, що скасували старе питання, але це перше, що з’явилося в Google. Іноді помилка довжини, про яку повідомляє ab, може бути викликана справжньою проблемою: якщо з'єднання закрите на стороні сервера до того, як клієнт не отримав загальну кількість байтів, оголошених у заголовку Content-Length. Це може статися, якщо між клієнтом і сервером є інші сторони, наприклад, наївні ручні балансири навантаження (мій випадок).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.