데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [K6 성능테스트 도구 - 05] Shared iterations & Per VU iterations 알아보기

      KIDO 22.12.12
      3,460 10 0

      [K6 Scenario - executor] Shared iterations

      • K6는 다양한 시나리오를 제공하며, 시나리오를 통해서 클라이언트 요청 패턴을 설정할 수 있다.

      • 고정된 수의 반복이 여러 VU들 사이에 "공유" 되며 모든 반복이 실행되면 테스트가 종료된다.

      • 꼭 기억해야할 사항은 공유 라는 의미는 요청이 공정하게 분산되지 않으며 더 빨리 실행되면 더 많은 반복을 수행한다.

      • 공유된 반복이 완료되면, 테스트는 종료된다.


      Options

      OPTION

      TYPE

      DESCRIPTION

      DEFAULT

      vus

      integer

      동시에 실행할 VU수

      1

      iterations

      integer

      모든 VU 들이 수행할 스크립트 반복의 총 횟수

      1

      maxDuration

      string

      강제로 중지되기 전에 최대 시나리오 지속시간 (gracefulStop 제외)

      "10m"


      언제 사용할까?

      • 이 실행기는 특정 양의 VU로 고정된 총 반복 횟수를 완료하고 VU당 반복 횟수가 중요하지 않을 때 적합하다. (모든 vu가 공정하게 반복을 수행하지 않는다는 의미)

      • 이것은 VU의 가장 효율적인 사용이 될 것이므로 여러 테스트 반복을 완료하는 데 걸리는 시간이 염려되는 경우 이 실행기가 좋은 성능을 발휘할 것이다.

      • 개발 초기에 빠르게 테스트를 수행하고자 할때 이 실행기(executor)를 사용한다.


      예제

      • 이 예제에서는 최대 30초 동안 10개의 VU가 공유하는 총 200개의 반복을 실행한다.

      import http from 'k6/http';
      import { sleep } from 'k6';
      
      export const options = {
        discardResponseBodies: true,
        scenarios: {
          contacts: {
            executor: 'shared-iterations',
            vus: 10,
            iterations: 200,
            maxDuration: '30s',
          },
        },
      };
      
      export default function () {
        http.get('https://test.k6.io/contacts.php');
        // 설명을 위한 목적으로만 처리 일시 중지를 삽입하고 있다. 
        // 각 반복은 ~512ms 가 될 것이다. 그러므로 각 VU 최대 처리량은 ~2 반복/초 이다.
        sleep(0.5);
      }
      • executor: 'shared-iterations' 실행기를 사용한다는 의미이다. 이는 예약어이므로 정확한 단어인지 확인하자.

      • vus: 10 가상유저를 수행한다. 즉 10개의 vu가 수행이 된다는 의미이다.

      • iterations: 200 공유된 반복 횟수로 10개 vu가 모두 합쳐 200번 수행되었다면 테스트가 종료된다.

      • maxDurations: 최대 실행 시간으로 30초로 지정하고 있다.

      • 즉, 위 코드는 모두 합쳐 vu가 200번 수행되거나, 최대 30초가 지나면 테스트가 종료된다는 의미이다.

      • export default function() 은 기본 vu로 테스트 수행될 코드이다. 해당 함수에서 get 을 수행하고 0.5초 대기하고 다시 수행된다.


      관찰

      • 다음 그래프는 예제 스크립트의 성능을 보여준다.

      shared-iterations

      • 테스트 시나리오 입력 및 결과를 기반으로

        • 테스트는 기본 function에 대해 고정된 200회 반복으로 제한된다.

        • VU의 수는 10으로 고정되며 테스트가 시작되기 전에 초기화 된다.

        • 기본 function의 각 반복은 대략 515ms 또는 ~2/s 가 될 것으로 예상된다.

        • 최대 처리량(최고 효율)은 그러므로 ~20/s 이며 2 iter/s * 10 Vus의 결과이다.

        • 테스트의 더 많은 부분에 대해 최대 처리량이 유지된다는 것을 알 수 있다.

        • 8초 테스트 기간은 모든 executor 방법중 가장 짧다.

        • 반복 분포가 왜곡될 수 있음을 알고 있다. 한 VU는 50회 반복을 수행한 반면 다른 VU는 10회만 수행했을 수 있다.


      WrapUp

      • 공유된 반복수 혹은 최대 테스트 시간동안 요청을 호출해야하는 경우 shared-iterations 실행기를 사용한다는 것을 살펴 보았다.

      • 모든 vu는 best-effort 로 수행되므로, 즉 테스트 수행 결과가 빠른 vuser는 더 많은 반복을 수행하게 된다.

      • 이 테스트는 테스트 기간동안 짧게 시나리오를 돌려보고자 하는 경우 유용하다.

      [K6 Scenario - executor] Per VU iterations

      • K6는 다양한 시나리오를 제공하며, 시나리오를 통해서 클라이언트 요청 패턴을 설정할 수 있다.

      • 각 VU는 정확한 수의 반복을 실행해야하는 경우 적합한 실행기이다.

      • '완료된 반복의 총 수 = vus * 반복횟수' 의 식이 성립된다.


      Options

      OPTION

      TYPE

      DESCRIPTION

      DEFAULT

      vus

      integer

      동시에 실행될 VU의 수

      1

      iterations

      integer

      각 VU에 의해서 수행될 function 반복 수

      1

      maxDuration

      string

      강제로 중지되기 전의 최대 시나리오 지속 시간 (gracefulStop제외)

      "10m"


      언제 사용할까?

      • 동일한 양의 반복을 완료하기 위해 특정 양의 VU가 필요한 경우 이 실행기를 사용하라.

      • 이는 VU간에 분할 하려는 고정 테스트 데이터 세트가 있는 경우에 유용하다.


      Example

      • 이 예제에서 10개의 VU가 최대 30초 동안 총 200번의 반복에 대해 각 20번의 반복을 실행하도록 한다.

      import http from 'k6/http';
      import { sleep } from 'k6';
      
      export const options = {
        discardResponseBodies: true,
        scenarios: {
          contacts: {
            executor: 'per-vu-iterations',
            vus: 10,
            iterations: 20,
            maxDuration: '30s',
          },
        },
      };
      
      export default function () {
        http.get('https://test.k6.io/contacts.php');
        // 설명 목적으로만 처리 일시 중지를 삽입하였다. 
        // 각 반복은 ~515ms 이므로 VU 최대 처리량당 ~2 반복/s 가 된다. 
        sleep(0.5);
      }
      • executor: 'per-vu-iterations' 는 예약어이다. 즉 각 vu마다 동일한 반복을 수행하게 된다.

      • vus: 10개의 vuser 가 동작하게 된다.

      • iterations: 각 vu가 수행할 반복 횟수이다.

      • maxDuration: 최대 실행시간

      • 즉, 위 테스트는 10 * 20 의 총 반복횟수를 수행하게 된다. 각 vu마다 20번 반복을 수행하며, 30초가 지나면 테스트는 종료된다.

      • export default function() 은 기본 vu로 테스트 수행될 코드이다. 해당 함수에서 get 을 수행하고 0.5초 대기하고 다시 수행된다.


      관찰

      • 다음 그래프는 예제의 실행 결과를 보여준다.

      per-vu-iterations

      • 테스트 시나리오 입력 및 결과를 기반으로

        • VU의 수는 10으로 고정되어 있으며 테스트가 시작되기 전에 초기화 된다.

        • 총 반복은 VU당 20회 반복으로 고정된다. 즉, 200회 반복, 10VU * 각 20회 반복된다.

        • 기본 functioin의 각 반복은 대략 512ms 또는 ~2/s가 될 것으로 판단된다.

        • 따라서 최대 처리량(최고 효율)은 ~20/s, 2 iter / s * 10VU로 계산된다.

        • 그러면 최대 처리량에 도달했지만 유지되지 않는 것을 볼 수 있다.

        • 반복 배포가 VU 사이에 있기 때문에 빠른 VU가 일찍 완료되고 나머지 테스트 동안 유휴 상태가 되어 효율성이 저하될 수 있다.

        • 9초의 총 지속 시간은 효율성이 낮기 때문에 공유 반복보다 약간 더 길다.

        • 전체 테스트 기간은 가장 느린 VU가 20개 요청을 완료하는 데 걸리는 시간만큼 지속된다.


      WrapUp

      • 각 vu마다 동일한 반복 횟수를 수행해야하는 경우 'per-vu-iterations' 를 executor로 지정하면 된다.

      • 테스트를 골고루 수행해야하는 경우에 위와 같은 시나리오가 적합하다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기
      동영상 기고하기