본문 바로가기
Log/Experiment

exp010_게시글 생성 10,000개 생성 요청 시 10,000개가 모두 생성될까

by RIEM 2023. 3. 2.

Title

exp010_게시글 생성 10,000개 생성 요청 시 10,000개가 모두 생성될까

Research Question

성능 테스트 도구 nGrinder로 경매 데이터(bid entity) 생성 요청을 지속적으로 하면 어떻게될까?

Summary

  • 10,000개 생성 요청 결과, 10,000개 모두 실패 없이 생성 완료했다
  • 이때 VUser 1000명으로 10번씩 생성하는 테스트와 VUser 100명이 100번씩 생성하는 테스트 모두 진행했고, 오류가 발생하지 않았다
  • 테스트 초기에 모든 요청이 에러로 기록되는 문제가 발생했는데 nGrinder 스크립트 관련 이슈로 추정된다. 테스트 옵션에 Ignore errors를 설정하여 해결 했다.

Background Information

  • current Experiment : test-pyramid-20230302-001

Procedures

nGrinder POST 스크립트 작성

Screen Shot 2023-03-02 at 5 31 19 PM

Data Recording & Analysis

test-pyramid-20230302-001

  • Agent : 1
  • Vuser : 1
  • Duration : 1mins
  • Ramp-up : True

Screen Shot 2023-03-02 at 6 25 33 PM
테스트 결과 nGrinder 리포트 상에는 모두 에러로 잡혔다.

Screen Shot 2023-03-02 at 6 26 26 PM
그러나 PM2 모니터에서는 로그가 정상적으로 찍혔다.

Screen Shot 2023-03-02 at 6 24 59 PM
DB를 확인해보니 데이터가 총 1347개까지 생성되었다. 여기서 궁금점은 테스트가 모두 완료된 것인가 아니면 도중에 끊긴 것이냐다.

Application Server

Screen Shot 2023-03-02 at 6 30 04 PM
이는 어플리케이션 서버의 CPU 사용률인데 3% 이하다. 왜 1000회 이상 생성 요청동안 3%밖에 사용하지 않았을까?

RDS

Screen Shot 2023-03-02 at 6 37 00 PM
DB도 뭔가 열심히 일하는 느낌이 아니다.

Duration을 1분으로 잡고 시작했었는데, 시간이 아니라 count 단위로 테스트를 진행해야겠다는 생각이 들었다. 왜냐하면 count로 해야 정확하게 POST 요청 횟수를 파악할 수 있고 성공률도 계산할 수 있기 때문이다. 그뿐만 아니라 1분 단위로 DB I/O 요청을 하는 것은 첫 테스트치고 강도가 높을 수도 있겠다는 생각이 들었다.

test-pyramid-20230223-002

  • Vuser : 20
  • Run count : 10
  • Total request : 200
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 1351
  • 테스트 완료 후 DB 데이터 개수 : 1584
  • 테스트 중 생성 데이터 개수 : 233

Screen Shot 2023-03-02 at 8 23 28 PM

Screen Shot 2023-03-02 at 8 27 11 PM
테스트 결과, 데이터는 정상적으로 잘 생성 되었다. 테스트 총 200회 진행했는데, 데이터가 총 233개 생성되었다.
문제는 nGrinder는 모든 테스트 결과를 모두 에러로 정의하고 있었다. nGrinder 스크립트 쪽 문제가 아닐까 생각했다.

Application Server

Screen Shot 2023-03-02 at 8 53 31 PM
CPU 8.98%. 이전보다는 더 상승했다.

RDS

Screen Shot 2023-03-02 at 8 54 25 PM
RDS CPU 사용률은 큰 변화가 없다.

이번엔 좀 더 늘려보자.

test-pyramid-20230223-003

  • Vuser : 200
  • Run count : 10
  • Total request : 2000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 1584
  • 테스트 완료 후 DB 데이터 개수 : 2331
  • 테스트 중 생성 데이터 개수 : 747

이번엔 총 2000개 테스트를 시도했는데, 747개 데이터 생성 후 테스트가 종료되었다.

application server

Screen Shot 2023-03-02 at 9 07 55 PM
2.94%. 여전히 미미하다.

RDS

Screen Shot 2023-03-02 at 9 07 15 PM

test-pyramid-20230223-004

  • Vuser : 198
  • Run count : 50
  • Total request : 9900
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 2349
  • 테스트 완료 후 DB 데이터 개수 : 12231
  • 테스트 중 생성 데이터 개수 : 9882

Screen Shot 2023-03-02 at 9 12 17 PM
Error을 무시하는 옵션을 켜주고 진행해보겠다.

Application Server

Screen Shot 2023-03-02 at 9 30 34 PM

RDS

Screen Shot 2023-03-02 at 9 31 06 PM

Ignore Error 옵션을 켜주니 정상적으로 비딩 생성 요청이 진행되었다.

진행 테스트 수 : 9900
생성 데이터 수 : 9882

게시글 생성률이 99.8%이고 게시글 생성 실패율이 약 0.2%다. 총 누락 생성 게시글은 18건이다. 조금 더 테스트를 해보자.

test-pyramid-20230223-005

이번에는 같은 수의 생성 요청인데 VUSer 수를 올려보겠다.

  • Vuser : 1000
  • Run count : 10
  • Total request : 10000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 21703
  • 테스트 완료 후 DB 데이터 개수 : 31703
  • 테스트 중 생성 데이터 개수 : 10000

게시글 생성률이 100%에 도달했다.

application server

Screen Shot 2023-03-02 at 9 52 45 PM

RDS

Screen Shot 2023-03-02 at 9 53 19 PM

VUser을 1000명으로 설정하고 각 유저가 10개씩 데이터를 생성하는 방식으로 접근했더니, 게시글 생성 실패가 없었다.

이제 10000개 데이터를 기준으로 테스트를 다각화해보면 흥미로운 인사이트를 얻을 것 같다는 생각이 들었다. 한번 더 가보자.

test-pyramid-20230223-006

이번에도 10000개의 데이터를 만드는데, VUser을 100명이 각 100개의 데이터를 만드는 시나리오를 설정해보자.

  • Vuser : 100
  • Run count : 100
  • Total request : 10000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0 (after truncated)
  • 테스트 완료 후 DB 데이터 개수 : 10000
  • 테스트 중 생성 데이터 개수 : 10000

100명이 100개의 비딩 게시글을 생성했고, 모두 성공했다.

Application Server

Screen Shot 2023-03-02 at 10 09 23 PM
CPU 9.33 % 사용했다.

RDS

Screen Shot 2023-03-02 at 10 10 11 PM
CPU는 10.6%

Discussion

Conclusion

Screen Shot 2023-03-02 at 10 11 52 PM

  • 10,000개 생성 요청 결과, 10,000개 모두 실패 없이 생성 완료했다
  • 이때 VUser 1000명으로 10번씩 생성하는 테스트와 VUser 100명이 100번씩 생성하는 테스트 모두 진행했고, 오류가 발생하지 않았다
  • 테스트 초기에 모든 요청이 에러로 기록되는 문제가 발생했는데 nGrinder 스크립트 관련 이슈로 추정된다. 테스트 옵션에 Ignore errors를 설정하여 해결 했다.

Reference

Appendix

댓글