ab 부하 테스트


194

아파치 벤치 도구 ( ab)를 사용하여 웹 사이트를로드 테스트하는 방법을 누군가가 나를 안내 할 수 있습니까?

다음을 알고 싶습니다.

분당 얼마나 많은 사람들이 사이트를 처리 할 수 ​​있습니까?

이것을 알아 내기 위해 실행 해야하는 명령을 안내하십시오.

나는 모든 튜토리얼을 시도했지만 혼란스러워합니다.

답변:


315

아파치 벤치 마크 도구는 매우 기본적이며, 성능에 대한 확실한 아이디어를 제공하지만 사이트에서 프로덕션 환경에 심각한 스트레스를 가할 경우에만 의존하는 것은 좋지 않습니다.

가장 일반적이고 간단한 매개 변수는 다음과 같습니다.

-c: ( "동시성"). 동시에 사이트를 방문하는 클라이언트 (사람 / 사용자) 수를 나타냅니다. ab실행 하는 동안 -c사이트를 방문하는 클라이언트가 있습니다. 이것이 실제로 벤치 마크 동안 사이트가 겪을 스트레스의 양을 결정합니다.

-n: 몇 건의 요청을할지 나타냅니다. 벤치 마크의 길이 만 결정합니다. 서버가 지원할 수 -n있는 -c가치를 가진 높은 가치 는 스트레스가 지속될 때 문제가 발생하지 않도록하는 것이 좋습니다. 5 시간 동안보다 5 초 동안 스트레스를 지원하는 것은 다릅니다.

-k: "KeepAlive"기능 브라우저는 기본적으로 수행합니다. -k"부울"이므로 값을 전달할 필요가 없습니다 (즉, 테스트에서 HTTP의 Keep Alive 헤더를 사용하고 연결을 유지하기를 원함을 나타냅니다). 브라우저가이 작업을 수행하고 브라우저에서 사이트가 가져 오는 스트레스와 흐름을 시뮬레이트하고 싶을 수 있으므로이를 벤치마킹하는 것이 좋습니다.

마지막 주장은 단순히 호스트입니다. 지정하지 않으면 기본적으로 http : // 프로토콜이 적용됩니다.

ab -k -c 350 -n 20000 example.com/

위의 명령을 실행하면 2 만 건의 요청이 충족 될 때까지 350 개의 동시 연결로 http://example.com/ 을 누르게됩니다. 연결 유지 헤더를 사용하여 수행됩니다.

프로세스가 2 만 건의 요청을 완료하면 통계에 대한 피드백을받습니다. 이것은 위의 매개 변수를 사용할 때 사이트가 얼마나 스트레스를 받아 수행했는지를 알려줍니다.

사이트에서 동시에 처리 할 수있는 사람 수를 알아 보려면 응답 시간 (평균, 최소 및 최대 응답 시간, 요청 실패 등)이 사이트에서 허용 할 수있는 숫자인지 확인하십시오 (다른 사이트는 다른 속도를 원할 수 있음). "확장하면 요청이 실패하고 중단됩니다"라고 말하는 지점에 도달 할 때까지 다른 -c 값으로 도구를 실행할 수 있습니다.

웹 사이트에 따라 분당 평균 요청 수가 예상됩니다. 이것은 매우 다양하므로 ab로 이것을 시뮬레이션 할 수 없습니다. 그러나 다음과 같이 생각하십시오. 평균 사용자가 분당 5 개의 요청을 받고 평균 응답 시간이 2 초인 경우, 분당 10 초는 1 명의 사용자가 요청에 있음을 의미합니다. 사이트를 방문 할 시간의 1/6 이것은 또한 6 명의 사용자가 동시에 ab를 사용하여 사이트를 방문하는 경우 동시성 레벨 (-c)이 6에 불과하더라도 시뮬레이션에 36 명의 사용자가있을 가능성이 있음을 의미합니다.

이는 사이트를 사용하는 사용자에게 예상되는 동작에 따라 다르지만 "사용자가 분당 X 개의 요청을받을 것으로 예상하고 평균 응답 시간이 2 초이면 유효하다고 생각합니다"에서 얻을 수 있습니다. 그런 다음 평균 응답 시간이 2 초가 될 때까지 -c 레벨을 수정하고 (최대 응답 시간과 stddev가 여전히 유효한지 확인) -c를 얼마나 크게 만들 수 있는지 확인하십시오.

나는 이것을 분명히 설명하기를 바랍니다 :) 행운을 빈다


5
똑 바르고 명확한 답변! 왜 이런 결과를 얻었는지 좀 더 설명해 주시겠습니까? "또한 동시에 6 명의 사용자가 ab로 사이트를 방문하는 경우 동시성 수준 (-c)이 단지 36 명이지만 시뮬레이션에 36 명의 사용자가있을 가능성이 있음을 의미합니다. 6. "
kbariotis

3
다만 -l, 페이지에 동적 컨텐츠가있는 경우 옵션마다 요청 길이가 다르기 때문에 실패한 요청이 많이 발생하지 않도록 옵션 을 추가하려고 합니다.
JCM

73

이것을 알아 내기 위해 실행 해야하는 명령을 안내하십시오.

가장 간단한 테스트는 한 번에 10 개의 요청을 한 번에 10 개씩 수행하는 것입니다 (테스트 기간 동안 10 명의 동시 사용자가 각각 100 페이지 씩을받는 것을 대략 시뮬레이션합니다).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 요청 횟수입니다.

-c 10 동시 방문자 (순차 방문자)를 더 잘 시뮬레이션하기 위해 한 번에 하나의 요청 대신 한 번에 10 개의 요청을 수행하도록 AB에 지시합니다.

-kKeepAlive웹 서버가 요청을 한 후에 연결을 종료하지 말고 계속 재사용하도록 요청 하는 헤더를 보냅니다 .

Accept-Encoding: gzip, deflatemod_deflate는 거의 항상 text / html 출력을 25 % -75 % 압축하는 데 사용되므로 여분의 헤더를 보내고 있습니다. 이는 웹 서버의 전반적인 성능에 영향을 미치므로 그 영향을 무시해서는 안됩니다. 같은 시간에 2 배의 데이터를 전송할 수 있습니다).

결과 :

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

가장 간단한 해석을 위해서는 다음 행을 무시하십시오.

Requests per second:    704.23 [#/sec] (mean)

60을 곱하면 분당 요청이 있습니다.

실제 결과를 얻으려면 복잡한 PHP 코드 및 여러 MySQL 쿼리를 포함하여 모든 기능이 어떻게 작동하는지 알아야하기 때문에 정적 HTML 또는 index.php 파일 대신 Wordpress를 테스트해야합니다.

예를 들어 다음은 동일한 시스템 및 WAMP 환경에서 Wordpress를 새로 설치 한 결과를 테스트 한 결과입니다 (WampDeveloper를 사용하고 있지만 Xampp, WampServer 등도 있습니다) ...

Requests per second:    18.68 [#/sec] (mean)

지금은 37 배 더 느립니다!

로드 테스트 후 전체 성능 (초당 요청 수)을 개선하고 더 큰로드 (예 : Apache 증가 -n-cApache 충돌) 에서 웹 서버의 안정성을 높이기 위해 수행 할 수있는 여러 가지 작업이 있습니다. 당신은 여기에 대해 읽을 수 있습니다 :

AB를 사용한 Apache로드 테스트 (Apache Bench)


9

Windows에서 Apache Bench (AB)를 설정하는 단계 (IMO-권장).

1 단계-Xampp 설치
2 단계-CMD를 엽니 다.
3 단계-CMD에서 아파치 벤치 대상 ( cd C:\xampp\apache\bin)으로 이동합니다.
4 단계-명령 붙여 넣기 ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
5 단계-기다립니다. 당신의 완료


작동하지 않습니다 ...이 오류가 발생합니다. localhost 벤치마킹 (인내심) ... apr_socket_recv : 연결이 거부 됨 (111)
Vijaysinh Parmar

localhost를 127.0.0.1로 교체
akshaynagpal

3

나는 아파치 abs 또는 PHP 측정 스크립트 또는 PHP 확장 스크립트를 구축 / 파괴하여 스크립트의 속도를 측정 할 수 있는지 궁금했습니다.

마지막 두 가지가 나를 위해 실패했습니다 : 그들은 대략적입니다. 그 후 나는 "ab"와 "abs"를 시도했다.

"ab -k -c 350 -n 20000 example.com/"명령은 모두 더 쉬워서 아름답습니다!

그러나 아파치 서버에서 "localhost"를 생각한 사람이 있습니까 (예 : www.apachefriends.org)?

루트에 "bench"와 같은 두 개의 파일이있는 폴더를 작성해야합니다. 테스트 "bench.php"및 참조 "void.php".

그런 다음 벤치마킹하십시오!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

바탕 화면에서 다음과 같이 .bat 파일 (Windows)을 사용해야합니다.

bench.bat

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

이제주의를 기울이면 ...

void 스크립트는 결과가 0이 아닙니다! 결론은 두 번째 결과에서 첫 번째 결과를 줄여야합니다 !!!

여기에 내가 얻었다 :

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 내가 기대하는 결과!


2

ab 만 사용하여 API를로드 테스트하는 것만으로는 충분하지 않습니다. 그러나 사이트 성능에 대한 기본적인 아이디어를 제공하는 훌륭한 도구라고 생각합니다.

ab 명령을 사용하여 백그라운드에서 동시에 다른 데이터로 여러 API 엔드 포인트를 테스트하려면 "nohup"명령을 사용해야합니다. 터미널을 닫아도 명령을 실행합니다.

나는 전체 프로세스를 자동화하는 간단한 스크립트가 사용 주시기 썼다 : http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

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