안녕하세요. ngrinder 사용을 목적으로 공부중입니다.
몇일전부터 계속 사용해보고 있습니다.
다른분들도 비슷하시겠지만 저는 성능테스트를 진행하게 되면 테스트 대상의 예상되는 성능값(TPS/응답시간/동접자수 등)을 계획하여 성능테스트를 진행하고 있습니다. 그러던중에 궁금한점이 생겨서 문의드립니다.
최대TPS가 2800인 XXX-API가 있습니다.
해당 API를 ngrinder로 성능테스트 시
<스크립트 내 sleep 1000 적용>
에이전트: 4 / 프로세스: 20 / 스레드: 35 / 총 가상유저: 2800을 하면 ngrinder controller 기준으로 2400정도의 TPS만 부하가 들어갑니다.
<sleep 미적용>
에이전트: 4 / 프로세스: 10 / 스레드: 10 / 총 가상유저: 400을 해도 ngrinder controller 기준으로 2400정도의 TPS의 부하가 들어갑니다
여기서 확인 차 문의입니다.
1. 1프로세스/스레드(1유저)의 경우 1개의 요청을 보내고 응답을 받는 즉시 다시 요청을 보내는 방식인가요?
- 예를들어 응답시간이 0.15초일 경우 즉시 새로운 요청을 보내고 반복하여 1초에 6.6개의 요청을 보낸다 (6.6TPS)
- 그래서 400유저의 경우 2,640TPS까지 부하가 들어갈 수 있고 sleep 미적용 시 400유저만으로도 대상 API에 2400TPS의 부하가 들어간다... 일까요?
그렇다면...
2. 왜 두가지 성능테스트에서 약 2400TPS의 부하까지만 들어가는 것일까요? (해당 API의 임계성능은 2800TPS입니다.)
2800유저를 sleep 미적용상태로 테스트해 보았습니다.
실행중인 유저수가 1800일때 이미 TPS는 2800을 넘겨서 대상API에 임계를 넘었습니다.
아마 계속 진행하여 2800유저가 모두 실행되면 응답시간초과로 에러가 발생할것으로 예상됩니다.
그렇다면 ngrinder 성능테스트 시에는 어떤 기준으로 가상유저수를 고려해야 할까요?
위 처럼 응답시간을 계산하여 유저수를 정하는것이 좋을까요? 아니면 예상되는 동접자 혹은 TPS를 기준으로 유저수를 정하는것이 좋을까요?
의견을 부탁드립니다.
감사합니다
#참고로 좌측이미지는 loadrunner에 site scope를 연결하여 모니터링 한 그래프입니다