AB를 사용한 부하 테스트 ... 가짜 요청 실패 (길이)


209

내 호기심을 위해 내 서버에서로드 테스트를 수행하기 위해 다음을 실행했습니다.

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

이렇게하면 200 초 동안 50 개의 연결 유지 연결이 열리고 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 "실패한"요청에 유의하십시오. 나는 이것을 알아낼 수 없다.

테스트가 실행되면서 페이지 하단의 페이지로드 시간이 일반적인 .02 대신 .5로보고되었지만 홈 컴퓨터에서 웹 사이트에 완벽하게 액세스 할 수있었습니다. 그러나 한 번도 실패한 요청이 없었습니다.

그렇다면 AB는 왜 연결의 절반이 실패했다고보고합니까? 그리고 그 맥락에서 "길이 :"는 무엇을 의미합니까?


웹 사이트에로드 밸런서가 있습니까? 로드 밸런서사용한로드 테스트 에 대한 내 블로그 게시물을 참조하여 로드 테스트 의 "나에게 효과적"상황을 설명하십시오.
Patrick Lightbody

답변:


361

신경 쓰지 마. "길이 실패"는 단지 응답 길이의 약 절반이 다른 것을 나타낸다.

내용은 동적이기 때문에 아마도 세션 식별자 또는 이와 유사한 것일 수 있습니다.


8
이봐, 나는 방금 같은 "문제"에 부딪쳤다. 고맙습니다!
Richard Hurt

2
답변 주셔서 감사합니다, 나는 정확히 같은 의심했다.
Saiyine

63
예, 2 년 후에도이 답변은 여전히 ​​유용합니다.
Sergi

11
가변 컨텐츠 길이 불일치로이 속성을 너무 빨리 표현하지 마십시오. ab는 HTTP 상태 코드 500을 요약에서 오류로보고하지 않습니다. 길이가 일치하지 않는 이유는 실제 오류가 있기 때문일 수 있습니다. -v 4를 사용하여 더 많은 정보를 얻을 수 있습니다 (많은 출력물이 있으므로 파일에 더 나은 파이프).
탈 레프 아미

3
실제로 이것은 ab 매뉴얼에 설명되어 있습니다. httpd.apache.org/docs/current/programs/ab.html "테스트 도중 문서 길이가 변경되면 응답은 오류로 간주됩니다."
Захар Joe

132

다른 말로 문제를 설명하려면 :

아파치 벤치마킹 도구 (ab)는 전체 테스트에서 응답 내용의 길이가 동일하다고 가정합니다. 첫 번째 응답의 컨텐츠 길이를 저장합니다. 추가 응답의 내용 길이가 다른 경우 "길이 실패"가 발생합니다.

다음 아파치 버그 보고서는 다음을 확인하는 것으로 보입니다. ASF 버그 42040

요약 : 가변 길이의 컨텐츠를 제공하는 경우 이러한 종류의 ab 요청 실패를 무시해야합니다.

편집 : 최근에 ab명령에 새로운 (적어도 나를 위해) 옵션이 있음을 알았습니다 .

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

나는 그것을 볼 수있는 AB 버전 2.3 <$는 수정 : 1,528,965 $> 하지만 그것을 볼 수 없습니다 AB 버전 2.3 <$는 수정 : 655,654 $> , 그래서 아마 비교적 최근에 추가되었습니다.


4
Mac 사용자라면 누구나 ab 버전이 뒤처져 있고 -l을 사용하지 않을 가능성이 있습니다. 소스에서 또는 homebrew를 통해 설치할 수 있지만 "brew install ab"는 아파치 패키지의 일부이므로 작동하지 않습니다. "brew install homebrew / apache / ab"로 설치할 수 있습니다.
netpoetica

8

오래된 질문을 되새겨 서 죄송하지만 Google에서 처음으로 나타나는 질문이었습니다. 때때로 ab에 의해보고 된 길이 오류는 실제 문제로 인해 발생했을 수 있습니다. Content-Length 헤더에 선언 된 총 바이트 수가 클라이언트에 의해 수신되기 전에 연결이 서버 측에서 닫힌 경우. 예를 들어 순진한 수제로드 밸런서 (내 경우)와 같이 클라이언트와 서버 사이에 다른 당사자가있는 경우 발생할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.