문제

저는 ApacheBench를 사용하고 내 웹사이트를 벤치마킹하는 방법을 알아내려고 노력 중입니다.기본 사이트 프로젝트를 설치했습니다(ASP.NET MVC이지만 .NET 사용자가 아닌 경우 읽기를 중단하지 마십시오).

나는 아무것도 바꾸지 않았습니다.새 프로젝트를 추가합니다.구성을 RELEASE로 설정합니다.디버그 없이 실행합니다.(그래서 LIVE 모드입니다).예, 이는 프로덕션 등급 IIS나 Apache 등이 아닌 내장된 웹 서버를 사용하는 것입니다.

결과는 다음과 같습니다.

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
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 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        ASP.NET
Server Hostname:        localhost
Server Port:            50035

Document Path:          /
Document Length:        1204 bytes

Concurrency Level:      1
Time taken for tests:   2.371 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1504000 bytes
HTML transferred:       1204000 bytes
Requests per second:    421.73 [#/sec] (mean)
Time per request:       2.371 [ms] (mean)
Time per request:       2.371 [ms] (mean, across all concurrent requests)
Transfer rate:          619.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0      16
Processing:     0    2   5.5      0      16
Waiting:        0    2   5.1      0      16
Total:          0    2   5.6      0      16

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

C:\Temp>

이제 정확히 무엇을 봐야 할지 모르겠습니다.

첫째, 요청 횟수를 1초 후에 확인합니다.그렇다면 초당 300개의 요청을 처리해야 한다는 요구사항이 있다면 이는 초당 평균 421개의 요청을 처리한다는 뜻인가요?

둘째, 동시성을 더 추가하는 이유는 무엇입니까?마찬가지로, 1개의 동시 히트가 1000개라면 2개의 동시 히트가 500개와 어떻게 다릅니까?다른 요청을 차단하는 코드가 있는지 테스트하기 위한 것인가요?

마지막으로, 제가 주목해야 할 결과에서 제가 놓친 중요한 것이 있습니까?

감사해요 :)

도움이 되었습니까?

해결책

더 동시에 추가하는 이유는 무엇입니까?마찬가지로, 1 동시에 1000 타격 을가하면 2 동시에 500에 어떻게 다릅니 까?다른 요청을 차단하는 코드가 있는지 테스트해야합니까?

그것은 그것에 관한 것입니다. 그렇습니다.귀하의 애플리케이션은 아마도 동시성으로 인해 문제가 발생할 수 있는 작업을 수행하고 있을 것입니다.

몇 가지 예:

  • 페이지가 파일에 접근을 시도하고 있습니다 - 그 과정에서 파일을 잠그고 있습니다;이는 다른 페이지가 동일한 파일에 액세스해야 하는 경우 첫 번째 페이지가 작업을 마칠 때까지 기다려야 함을 의미합니다.
  • 데이터베이스 액세스의 경우에도 마찬가지입니다.한 페이지가 데이터베이스에 쓰는 경우 일종의 잠금 메커니즘이 있습니다. (DBMS에 따라 테이블 기반, 행 기반 등 무엇이든 가능)

동시성 테스트는 괜찮습니다 ...귀하의 웹사이트에 동시에 한 명 이상의 사용자가 있는 경우는 없습니다.그것은 현실적이지 않습니다. 바랍니다.


프로덕션 환경에서 얼마나 많은 사용자가 동시에 사이트에 있을 것인지 생각하고 동시성을 조정해야 합니다.사이트에 동시에 5명의 사용자가 있다고 해서 ab를 사용하여 5명의 동시성을 테스트해야 한다는 의미는 아닙니다.

  • 실제 사용자는 각 요청 사이에 몇 초 정도 기다립니다(페이지를 읽는 데 걸리는 시간, 링크를 클릭하는 데 걸리는 시간 등...).
  • ab는 전혀 기다리지 않습니다.페이지가 로드될 때마다(즉, 요청이 완료될 때마다) 다른 요청이 시작됩니다!


또한 다른 두 가지 사항은 다음과 같습니다.

  • ab는 한 페이지만 테스트합니다. 실제 사용자는 전체 웹사이트를 탐색하게 되므로 한 페이지만 테스트할 때는 발생하지 않는 동시성 문제가 발생할 수 있습니다.
  • ab는 한 페이지만 로드합니다.외부 리소스를 요청하지 않습니다(CSS, 이미지, JS 등을 생각해 보세요).즉, 사이트가 제작 중일 때 비용이 많이 들지 않더라도 다른 요청이 많이 있을 것이라는 의미입니다.

참고로:다음과 같이 훨씬 더 완전한 테스트를 수행할 수 있는 다른 도구를 살펴보는 것이 좋습니다. 포위, J미터, 또는 오픈STA :ab는 자신이 한 일이 페이지를 최적화했는지 여부를 측정하고 싶을 때 정말 유용합니다.그러나 사이트의 "실제" 사용을 시뮬레이션하고 싶다면 훨씬 더 적합합니다.

다른 팁

예, 귀하의 사이트가 처리할 수 있는 초당 요청 수를 알고 싶으면 "초당 요청 수" 줄을 보십시오.귀하의 경우 동시성 1로 ab를 실행했기 때문에 정말 간단합니다.각 요청은 평균 2.371ms만 소요되었습니다.그 중 421개는 차례로 1초가 걸립니다.

사이트의 용량을 정확하게 측정하려면 동시성을 약간 활용해야 합니다.여러 요청이 IIS에 의해 병렬로 처리되므로 특정 수준의 동시성까지 처리량이 증가할 것으로 예상됩니다.예:서버에 여러 개의 CPU/코어가 있는 경우.또한 페이지가 외부 IO(중간 계층 서비스 또는 DB 호출)에 의존하는 경우 CPU는 한 요청에 대해 작업할 수 있고 다른 요청은 IO가 완료되기를 기다리고 있습니다.특정 지점에서 초당 요청 수는 동시성이 증가하면서 평준화되고 대기 시간이 증가하는 것을 볼 수 있습니다.동시성을 더욱 높이면 서버가 이러한 모든 동시 요청을 저글링하는 데 더 많은 리소스를 할당해야 하므로 처리량(요청/초)이 감소하는 것을 볼 수 있습니다.

즉, 대부분의 요청은 약 2ms 내에 반환됩니다.꽤 빠른 속도이므로 DB 또는 중간 계층 호출 측면에서 많은 일이 벌어지지 않고 테스트가 실행 중일 때 시스템의 CPU가 최대치에 달했을 것입니다(또는 뭔가 잘못되어 매우 빠르게 실패합니다).ab가 의도한 응답 페이지를 확실히 받았나요?즉.테스트하고 있는 페이지가 1204바이트 크기라고 생각하시나요?)또 다른 요점이 나타납니다.ab 자체도 CPU를 소비합니다. 특히 동시성을 높이면 더욱 그렇습니다.그래서 다른 컴퓨터에서 ab를 실행하고 싶습니다.

또한 사이트에서 중간 계층 서비스 또는 DB에 대한 외부 호출을 수행하는 경우 machine.config를 조정하여 IIS가 할당하는 스레드 수를 최적화할 수 있습니다.http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

그리고 약간의 상식:소요 시간 통계는 사용된 타이머의 세분성으로 나타나기 때문에 ~16ms 단위로 수행됩니다.즉.응답의 80%는 0ms가 걸리지 않았고 16ms 미만의 시간이 걸렸습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top