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

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

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는 왜 연결의 절반이 실패했다고보고합니까? 그리고 그 맥락에서 “길이 :”는 무엇을 의미합니까?



답변

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

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


답변

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

아파치 벤치마킹 도구 (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 $> , 그래서 아마 비교적 최근에 추가되었습니다.


답변

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