2016-05-31 2 views
2

Jmeter 테스트에서 상당한 성능 향상을 이해하려고합니다.JMeter : 더 많은 HTTP 요청으로 인해 성능이 향상됩니까?

멀티 테넌시 데이터베이스 환경에서 XML 페이로드를 게시하는 단일 HTTP 요청 샘플러가있는 스레드 그룹을 포함하는 단일 RESTful 서비스 테스트가 있습니다. 그런 다음 저장 프로 시저를 통해 XML 페이로드를 평가하고 자격이 자격이 있는지 여부를 나타내는 응답이 수신됩니다. 단일 JVM이 실행중인 Apache 7 환경에서 .bat 파일 (비 GUI 모드)에서이 테스트를 실행합니다.

테스트 스레드 그룹 속성

# of Threads: ${__P(test.threads,200)} 
Ramp-Up Period: ${__P(test.rampup,1)} 
Loop Count: Forever 
Delay Thread: Enabled 
Scheduler: Enabled 
Duration: ${__P(test.duration,1800)} 

HTTP 요청

Method: POST 
https://serverName:port/database/.../${__P(tenant,1111)}/Claim/${__property(contractId)} 

나는 TG 내에서 HTTP 요청 샘플러를 복제 어떤 이유로 URL 내에서 세입자 ID를 변경 성능이 55 % 이상 증가하는 것으로 보입니다. (즉, 클레임 수/초가 55 % 증가했습니다.) 테스트가 실패하지 않은 것 같아서 성능 증가가 오류 비율 증가로 귀착 될 수 없습니다.

로드 밸런서가 최적화를 수행하도록 다른 JVM을 활성화 한 경우 증가가 예상되지만, 그렇지는 않습니다.

HTTP 요청 (는 여전히 1 JVM 사용) 1

https://serverName:port/database/.../${__P(tenant,1111)}/Claim/${__property(contractId)} 

HTTP 요청이

https://serverName:port/database/.../${__P(tenant,2222)}/Claim/${__property(contractId)} 

근처에가는 이론은 JMeter가가에서 워크로드를 생성하는 것입니다 단일 요청보다 여러 요청의 비율이 높습니다. 나는 회의적이지만 회의론을지지하는 데 "단단한"것을 발견하지 못했습니다.

이 이론이 사실입니까? 그렇다면 왜 두 개의 HTTP 요청이 성능을 향상시킬 수 있습니까?

+0

그리고 당신은 당신의 성능을 messure 어떻게? 당신의 "이론"에 따르면 당신의 messurements는 jmeter 오버 헤드를 포함하고 이것은 틀릴 것입니다. – Antoniossss

답변

3

요약하면 충분합니다.

긴 버전 : JMeter를 작동 방식은 다음

이다 :

  1. JMeter를이 램프 업 기간
  2. 각 스레드 거꾸로 샘플러의 실행 시작시에 모든 스레드를 시작한다 (또는 따라 Logic Controllers 행)
  3. 요청에 더 많은 샘플러가없고 더 이상 반복을 반복하지 않아서 종료 될 때.

가상 사용자의 수가 "성능"과 어떻게 상관이 있습니까? 당신은 부하 테스트에 대한 가상 사용자에게 요청 번호의 수를 증가하는 경우는 처리량

처리량이 시간의 요청/단위로 계산에 영향을 미칩니다. 시간은 첫 번째 샘플의 시작부터 마지막 ​​샘플의 끝까지 계산됩니다. 여기에는 샘플로드 간격이 포함됩니다. 샘플 간격은 서버의로드를 나타내는 것으로 가정됩니다.

수식은 처리량 = (요청 수)/(총 시간)입니다.

잘 작동하는 시스템 처리량에서로드를 늘리면 동일한 요소 또는 선형 적으로 증가해야합니다.

로드를 늘리지 만 처리량이 증가하지 않으면 시스템에서 최대 성능을 얻을 때 이러한 상황을 "포화 지점"이라고합니다. 로드가 증가하면 처리량이 감소합니다.

참고 :

+0

그렇다면 Jmeter는 왜 max에 도달하기를 원하지 않습니까? 샘플러와 컨트롤러에 관계없이 항상 채도가 유지됩니까? Uniform Random Timer를 TG에 추가하면 처리량에 어떤 영향을 미칩니 까? – David

+0

타이머 (이전/이후 프로세서는 물론)는 고려되지 않으므로 처리량이 변경되지 않습니다. 타이머로 처리량을 제어하려면 [Transaction Controller] (https://www.blazemeter.com/blog/using-jmeters-transaction-controller)에 샘플러를 넣고 "부모 샘플 생성"및 "기간 포함 의 ..." –

0

당신의 성과를 어떻게 메꾸십니까? 당신의 "이론"에 따르면 당신의 messurements는 jmeter 오버 헤드를 포함하고 이것은 틀릴 것입니다. 두 경우 모두 응답이 동일합니까? 내 말은, 백엔드가 두 가지 경우 모두 동일한 작업을하고있는 것입니까?

아마도 첫 번째 요청은 다른 출력과 다른 출력을 반환 할 수 있습니다. 아마도 요청 중 하나에서 출력을 생성하는 것이 더 비쌉니다. 그래서 X 초에 N x Heavy 작업을 수행하고 두 번째 경우에는 G x heavy 작업 + H X light 작업을 같은 시간에 수행하는 것처럼 "incresed"성능을 느낄 수 있습니다. G < N/2 - 동시에 더 많은 요청이 있습니까? 확실한! Incored 성능? 아니.

어떤 일이 벌어지고 있는지 철저히 조사하려면 측정 방법을 검토해야합니다. 두 요청의 실제 시간을 비교하는 것으로 시작하겠습니다.

관련 문제