본문 바로가기

혼자 공부하기/개발 스터디

처음 해보는 부하 테스트(nGrinder) - (3)

728x90
반응형

 

 

nGrinder에 로그인하고 들어가니(기존 진행된 실험의) Report에 Status, Test Name, Script Name, Owner, Start Time, Thresold, TPS, MTT, Err Rate, Vusers, Actions 가 보인다.

 

 

각각 뭔지 확인해보아야겠다. 

참고로 TPS는 지난 번에 공부했음.

 

TPS는 아래 링크 참고.

 

https://metime.tistory.com/412

 

 

나의 질문
nGrinder에 로그인하면 보이는 Test Name, Script Name, Owner, Status, Start Time, Thresold, TPS, Err Rate, Vusers, Actions 각각 설명해줘. TPS는 빼고


ChatGPT 답변
nGrinder에서 테스트 결과나 진행 상황을 확인할 때, Test Name, Script Name, Owner, Status 등 여러 항목이 있습니다. 이 항목들이 무엇을 의미하는지 하나씩 설명드릴게요.

1) Test Name
  - 테스트의 이름입니다. 부하 테스트를 설정할 때 사용자나 팀이 테스트의 목적 또는 시나리오에 따라 이름을 지정할 수 있습니다. 이 이름을 통해 어떤 종류의 테스트인지, 어떤 목적을 위한 테스트인지 쉽게 파악할 수 있습니다.

2) Script Name
  - 테스트에서 사용된 스크립트의 이름입니다. 부하테스트는 Groovy와 같은 스크립트 언어를 사용해 작성된 시나리오에 따라 실행됩니다. 예를 들어 xxxxxxx.groovy라는 스크립트가 있다면, API나 시스템에 대한 호출 방법이 스크립트에 정의되어 있습니다.

3) Owner
  - 이 테스트를 실행한 사람의 이름을 나타냅니다. nGrinder 사용자 계정으로 로그인한 사용자가 테스트의 소유자가 되며, 그 사용자의 이름이 이 항목에 표시됩니다. 이를 통해 누가 테스트를 수행했는지 추적할 수 있습니다.

4) Status
  - 현재 테스트의 진행 상태를 나타냅니다. 일반적으로 Running(진행 중), Completed(완료됨), Failed(실패) 등의 상태로 표시됩니다. 이 항목을 통해 테스트가 실행 중인지, 완료 되었는지, 실패했는지 한눈에 파악할 수 있습니다.

5) Start Time
  - 테스트가 시작된 시간을 나타냅니다. 이 정보를 통해 테스트가 언제 시작되었는지 알 수 있으며, 나중에 결과 분석 시 시간대별 성능 변화를 확인하는 데 도움이 됩니다.

6) Treshold(임계값)
  - 임계값으로, 특성 성능 지표(예: 응답 시간, 에러율)가 초과해서는 안 되는 기준 값입니다. 시스템이 이 값을 초과하는 경우, 성능에 문제가 있을 수 있음을 나타냅니다. 테스트가 설정된 임계값을 넘는지 여부를 확인하여, 성능 문제가 있는지 빠르게 파악할 수 있습니다.

 

 

잠깐 궁금증이 생겨서, 끊고 가기

 

 

나의 질문
Thresold가 00:01:00 아니면 00:02:00 이런 형식으로 나와있는데, 내가 정하는거야? 아니면 실험 결과로 출력되는거야? 임계값 이해가 잘 안되네


ChatGPT 답변
Thresold"00:01:00" 또는 "00:02:00" 같은 형식으로 나와 있다면, 이 값은 시간 임계값을 의미합니다. 이는 테스트 중에 요청이 처리되는 데 걸리는 시간(응답 시간)에 대한 임계값으로 설정된 값입니다.

Thresold의 의미
  - Thresold는 성능 테스트에서 특성 성능 지표(주로 응답 시간)에 대한 기준입니다. 테스트 실행 중 요청이 이 임계값을 초과하는지 여부를 확인하는 역할을 합니다.
  - 예를 들어, 00:01:00이면 1분을 의미하며, 이는 각 요청이 1분 이내에 처리되어야 한다는 기준을 나타냅니다. 만약 요청이 1분을 넘겨 응답하면, 해당 요청은 임계값을 초과한 것으로 간주됩니다.

Thresold는 누가 정하는가
사용자가 사전에 설정합니다. nGrinder를 사용해 부하 테스트를 설정할 때, 응답 시간의 최대 임계값을 설정할 수 있습니다. 이 임계값은 서버 성능 목표로 설정될 수 있으며, 서버가 부하를 견디는 동안 응답 시간을 초과하지 않아야 한다는 기준으로 사용됩니다. 임계값을 설정하지 않으면, 기본값이 적용될 수 있습니다. 하지만 테스트 목적에 맞게 임계값을 사용자가 정의할 수 있습니다.

임계값이 실험 결과에 어떤 영향을 미치는가
임계값은 결과 분석에 중요한 기준이 됩니다. 테스트가 진행되는 동안 응답 시간이 설정된 임계값을 초과하는지 기준으로 시스템 성능을 평가할 수 있습니다. 예를 들어 0:02:00(2분)이 임계값으로 설정되었다면, 응답 시간이 2분을 초과하는 요청이 있을 경우 이를 성능 문제로 간주할 수 있습니다.

(하략)


나의 질문
아 그럼 지금 여기서 나온 00:01:00은 기본값이거나, 우리 팀원이 미리 설정해둔거구나. 이건 nGrinder 어디서 설정할 수 있어?


ChatGPT 답변
nGrinder UI에서 부하 테스트를 설정할 때, 임계값을 설정할 수 있는 곳은 주로 "Advanced Settings" 또는 테스트 실행 설정 부분입니다. 여기서 테스트가 특성 성능 기준을 초과할 때 알림을 받거나, 실패 처리하도록 설정할 수 있습니다.

설정하는 방법
1) nGrinder 웹 UI 에 접속
  - URL에 접속해서 로그인 한 후, 부하테스트 설정 화면으로 이동합니다.

2) 테스트 설정 화면에서 임계값(Treshold) 설정

  - 새로운 테스트를 설정하거나 기존 테스트를 수정할 때, 부하 테스트의 여러 매개변수를 설정할 수 있습니다. 여기서 응답 시간에 대한 임계값(Thresold)을 설정할 수 있는 시간 설정 관련 부분이 있습니다.

3) 응답 시간 임계값 설정
  - 부하 테스트 설정 페이지에서 "Advanced Settings" 또는 Performance 목표와 관련된 옵션을 찾습니다
  - 해당 항목에서 응답시간(Thresold)에 대한 임계값을 설정할 수 있으며, 예를 들어 00:02:00(2분)처럼 시간이 초과하면 성능 경고를 발생시키거나 실패 처리하도록 할 수 있습니다.

 

 

 

이해 됐다. 

이어서 보기

 

 

ChatGPT 답변
7) MTT (Mean Test Time, 평균 응답 시간)
  - MTT는 부하 테스트 중 각 요청이 처리되는 데 걸린 시간의 평균값을 나타냅니다.
  - 테스트 중 각 가상 사용자가 요청을 보낼 때 서버가 응답하는 데 걸린 시간이 평균적으로 얼마나 되는지 측정합니다.
  - 이 값이 높으면, 서버의 응답 속도가 느리다는 것을 의미합니다.

8) Err Rate(Error Rate, 에러 비율)
  - 테스트 중 발생한 에러 비율을 나타냅니다.
  - 모든 요청 중 성공하지 못한 요청의 비율을 백분율로 나타내며, 이 값이 높으면 시스템에 문제가 있을 가능성을 시사합니다.
  - 서버 과부하, 네트워크 문제,잘못된 요청 처리 등의 원인으로 에러가 발생할 수 있습니다.

9) Vusers (Virtual Users. 가상 사용자)
  - 부하 테스트에 참여한 가상 사용자 수를 나타냅니다.
  - 이 값은 테스트 중에 설정된 가상 사용자(Virtual Users, VUs)의 수이며, 각 가상 사용자가 서버에 요청을 보내면서 부하를 발생시킵니다.
  - 부하 테스트에서 중요한 지표로, 사용자가 많을 수록 시스템의 부하가 커지며, TPS나 MTT와 같은 지효에 영향을 미칩니다.

10) Actions
  - 테스트를 조작할 수 있는 기능입니다.
  - 테스트를 시작(Launch), 중지(Stop), 복제(Clone)하거나, 결과를 확인할 수 있는 버튼들이 여기에 포함됩니다
  - 이를 통해 테스트를 반복하거나, 기존 테스트를 복제하여 다른 조건으로 새롭게 실행할 수 있습니다.

 

 

 

이제 실제로 진행해 볼 수 있을 것 같다. 

가장 부하가 적은 것으로 테스트 실행부터 해봐야지.

 

반응형

 

 

 

 

잠깐, 더 모르는 부분이 있네.

 

Test Name에 들어가보니 Test Configuration이란 페이지가 있다.

 

이 부분도 일단 공부하고 넘어가기

 

 

나의 질문
Test Name 클릭해서 들어가봤어. 여기서 보이는 페이지에 대해 설명해줄 수 있어?


ChatGPT 답변
네, Test Configuration 페이지는 nGrinder에서 부하 테스트를 구성하는 주요 구성 요소들이 표시된 페이지입니다. 각 설정 항목에 대해 설명해 드릴게요.

1) List 섹션
  -  Tags: 이 테스트에 대해 태그를 붙여서 관리할 수 있습니다. 여러 테스트를 그룹화하거나 쉽게 찾기 위해 사용합니다.
  -  Description: 테스트에 대한 간단한 설명을 작성할 수 있습니다.이 테스트의 목적이나 특이사항 등을 적어두면 나중에 확인하기 쉽습니다.
  -  Clone/Clone and Start:  
    * Clone: 현재 설정된 테스트를 복제하여 수정하거나 새로운 테스트로 사용할 수 있도록 만듭니다. 
    * Clone and Start: 테스트를 복제하면서 바로 실행할 수 있습니다. 기존 테스트를 참조하여 동일한 설정으로 빠르게 새 테스트를 실행할 수 있습니다.  

2) Basic Configuration
  - Agent: 부하를 발생시키는 에이전트의 수를 설정합니다. 각 에이전트는 특정 서버에서 부하를 발생시키며, 테스트 중 여러 대의 에이전트를 사용할 수 있습니다.
    * 예시에서 Agent가 1로 설정되어 있고, 최대 3개까지 사용할 수 있다는 것은, 최대 3개의 서버에서 부하를 발생시킬 수 있다는 의미입니다.

  - Vuser per Agent: 각 에이전트가 생성하는 가상 유저(Virtual Users) 수를 설정합니다. 예를 들어, Vuser pser agent 가 10으로 설정되었다면, 한 에이전트 당 10명의 가상 사용자가 부하를 발생 시킵니다. Max: 3000 이므로, 한 에이전트가 최대 3000명의 가상 사용자를 생성할 수 있습니다.

  - Processes와 Threads
    * Processes:
에이전트에서 실행되는 프로세스의 수를 의미합니다. 프로세스는 실제로 부하를 발생시키는 하나의 실행 단위입니다.
    * Thresds
각 프로세스 내에서 실행되는 스레드 수 입니다. 한 프로세스당 5개의 스레드가 동작하며, 각 스레드가 독립적으로 가상 사용자 요청을 처리합니다
    * 예시로 Processes:2, Threads: 5라면, 하나의 에이전트에서 2개의 프로세스가 실행되며, 각 프로세스는 5개의 스레드를 포함하여 총 10개의 스레드가 동작하게 됩니다.

 

 

와 큰일이다. 여기서 프로세스랑 스레드 잘 모르겠다.

 

 

나의 질문
이 설명에서, 내가 애초에 processes랑 threads를 잘 모르겠어. 개념부터 여기 nGrinder에 적용되는 것까지 알려줘


ChatGPT 답변
ProcessesThreads는 컴퓨터 과학의 중요한 개념으로, 멀티테스킹병렬 처리를 관리하는 방법을 설명하는 용어입니다. 이 개념이 nGrinder에서 어떻게 적용되는지 이해하려면 기본 개념을 먼저 살펴본 후, nGrinder에서의 이 역할을 설명하겠습니다.

기본 개념: Processes와 Threads
1) Process(프로세스)
  - 프로세스운영체제에서 실행 중인 하나의 프로그램 또는 작업 단위입니다. 프로그램을 실행하면, 그 프로그램의 코드와 데이터가 메모리에 올라가고, 독립적으로 실행되는 프로세스가 생성됩니다.
  - 각 프로세스는 독립적인 메모리 공간을 가지고 있습니다. 프로세스 간에는 데이터나 자원(메모리, CPU 등)을 공유하지 않으며, 서로 간섭할 수 없습니다. 하나의 프로세스가 문제가 생겨 종료되더라도 다른 프로세스에 영향을 주지 않습니다.
  - 예를 들어, 당신이 웹 브라우저와 텍스트 에디터를 동시에 실행하면, 각각의 애플리케이션은 별도의 프로세스에서 동작하게 됩니다.

2) Thread(스레드)
  - 스레드 프로세스 내에서 실행되는 작은 작업 단위입니다. 여러 스레드는 하나의 프로세스 내에서 메모리와 자원을 공유하면서 동시에 작업을 처리할 수 있습니다.
  - 스레드는 하나의 프로세스 내에서 실행되기 때문에, 서로 데이터를 공유하고 상호작용할 수 있습니다. 이로 인해 메모리 사용이 효율적이지만, 스레드 간 동기화 문제나 충돌이 발생할 수 있습니다.
  - 한 프로세스 내에서 여러 스레드가 동작하면, 병렬로 여러 작업을 처리할 수 있습니다. 예를 들어, 웹 브라우저가 웹 페이지를 로딩하는 동시에 다른 탭을 통해 새로운 요청을 처리할 때 스레드가 사용됩니다.


nGrinder에서 Processes와 Threads의 역할
nGrinder에서 ProcessesThreads는 부하 테스트를 효과적으로 분산하고 병렬 처리하기 위한 중요한 개념입니다. 부하 테스트 중에는 수백, 수천 명의 가상 사용자가 서버에 요청을 보내면서 동시에 부하를 발생시킵니다. 이러한 가상 사용자는 프로세스와 스레드를 통해 동작하게 됩니다.
1) Processes(프로세스) in nGrinder
  - Processes는 nGrinder에서 부하를 발생시키는 에이전트의 실행 단위입니다. 하나의 프로세스는 부하 테스트를 위한 작업자(worker)라고 생각할 수 있습니다.
  - 각 프로세스는 독립적으로 실행되며, 에이전트 내에서 여러 프로세스를 동시에 실행시킬 수 있습니다.
  - 예를 들어, Processes: 2로 설정하면, 한 에이전트에서 두 개의 독립적인 프로세스가 부하를 발생시키며, 각각의 프로세스는 독립적인 부하 작업을 수행하게 됩니다.

  2) Threads(스레드) in nGrinder
  - Threads는 프로세스 내에서 실제로 가상 사용자 요청을 처리하는 단위입니다. 각 스레드는 프로세스 내에서 동시에 여러 가상 사용자의 요청을 서버에 전송할 수 있습니다.
  - 예를 들어, Threads: 5로 설정하면, 각 프로세스가 5개의 스레드를 생성하여 동시에 5명의 가상 사용자처럼 서버에 요청을 보낼 수 있습니다.
  - Processes:2, Threads: 5로 설정한 경우, 총 10개의 사용자가 동시에 부하를 발생시킬 수 있습니다.

(중략)

nGrinder에서 Processes와 Threads의 설정은 서버에서 얼마나 많은 부하를 발생시키는지를 결정하는 중요한 요소입니다. Processes는 병렬도 작업을 실행하는 독립적인 단위, Threads는 각 프로세스 내에서 실제로 부하를 발생시키는 작업 단위로 이해하면 됩니다.


나의 질문
그럼, 50명의 가상 유저를 생성하다고 하자. processes:5, threads: 10으로 하는 거랑, process: 10, threads: 5로 하는 거랑 결과가 같아?


ChatGPT 답변
결과적으로는 50명의 가상 유저가 생성되어 부하를 발생시키는 것은 동일하지만, 프로세스와 스레드 설정에 따라 부하가 발생하는 방식과 시스템 자원 사용에 차이가 있을 수 있습니다.

공통점: 총 50명의 가상 사용자가 동작하여 동일한 부하를 서버에 발생시킵니다. 

차이점: 프로세스와 스레드는 시스템의 자원 사용 방식병렬 처리에 영향을 미칩니다. 이 차이점은 부하를 발생시키는 방법에 따라 시스템 성능에 영향을 줄 수 있습니다.
  - 프로세스가 적고 스레드가 많은 경우( processes:5, threads: 10 ): 프로세스가 적기 때문에 운영체제에서의 프로세스 간 오버헤드(프로세스 생성, 메모리 할당 등)가 줄어듭니다. 대신 스레드 간 동기화에 더 많은 자원이 사용될 수 있습니다.
스레드가 많을 경우, 각 스레드가 동일한 프로세스 내에서 메모리와 자원을 공유하므로, 메모리 사용이 더 효율적일 수 있습니다.
한 프로세스에 많은 스레드가 실행되면, 스레드 간의 경합(locking)이나 자원 공유 문제가 발생할 수 있으므로, 스레드 간 문제가 중요해질 수 있습니다.

  - 프로세스가 많고 스레드가 적은 경우(process: 10, threads: 5): 프로세스가 많을 경우, 운영체제는 더 많은 프로세스를 관리해야 하므로, 프로세스 간 오버헤드가 늘어날 수 있습니다. 그러나 스레드 수가 적으므로 스레드 간 경합은 줄어듭니다.
프로세스 간 자원 공유는 거의 없기 때문에, 프로세스간 충돌은 발생하지 않습니다. 그러나 프로세스 생성에 필요한 자원이 더 많이 사용될 수 있습니다.
각 프로세스가 독립적인 자원을 사용하므로, 멀티코어 CPU를 더 잘 활용할 수 있습니다. 이는 CPU 코어 수가 많을 때 더 유리할 수 있습니다.


차이의 실제 영향
  - 시스템 자원 관리:
    * Processes가 많으면 운영 체제가 프로세스 생성, 메모리 할당, 컨텍스트 스위칭 등의 오버헤드가 커지지만, 각 프로세스가 독립적으로 동작하므로 멀티코어 CPU 활용이 더 잘 될 수 있습니다.
    * Threads가 많으면 프로세스 내에서 메모리와 자원을 공유하므로 메모리 사용이 더 효율적일 수 있지만, 스레드 간의 자원 경합 문제가 있을 수 있습니다.

  - 멀티코어 환경에서의 차이
    * 멀티코어 CPU에서는 프로세스가 많은 경우 각 코어에 프로세스가 할당되어 병렬 처리가 더 효율적일 수 있습니다. 스레드가 많은 경우에는 스레드 간의 자원 공유로 인한 경합이 발생할 수 있습니다.


언제 각각의 설정을 선택할까?
1) 프로세스가 적고 스레드가 많은 설정
  - 메모리 사용이 중요한 경우 적합
  - CPU 코어 수가 많지 않은 경우 적절
  - 많은 스레드가 필요한 부하 테스트나 경합이 적은 작업에 유리

2) 프로세스가 많고 스레드가 적은 설정
  - 멀티코어 CPU에서 성능을 극대화할 수 있음
  - 각 프로세스가 독립적으로 동작하므로, 프로세스 간 충돌이나 자원 공유 문제가 줄어듦
  - 각 프로세스가 독립적인 부하를 발생시켜야 하는 경우 적합

 

 

728x90

 

오 이해가 좀 된다.

그럼 이어서 마저 보겠다.

 

 

ChatGPT 답변
  - Script: 실제 부하 테스트에 사용할 스크립트를 선택하는 부분입니다.
    * svn 은 소스 버전 관리 시스템인 SVN에서 스크립트를 불러오는 방식입니다.

  - Script Resources:테스트 스크립트에서 사용하는 추가적인 파일이나 리소스를 업로드할 수 있는 곳입니다. 예를 들어, 데이터를 읽어올 외부 파일 등이 있을 때 여기에 추가할 수 있습니다.

  - Target Host: 부하 테스트의 대상 서버(테스트할 API 서버)의 IP 주소 또는 도메인이 여기에 표시됩니다. 이 테스트가 타겟하는 서버가 명시됩니다.

  -  Duration: 부하 테스트가 얼마 동안 실행될지 설정하는 부분입니다. 예시에서 00:01:00으로 설정되어 있다면, 이 테스트는 1분 동안 실행됩니다. 여기서 Duration이 설정된 것이 아마도 Thresold(임계값)처럼 보였을 수 있는데, 사실 Duration은 테스트 실행 시간을 의미하며, Thresold는 성능 한계 기준을 의미합니다. 

  - Run Count:  테스트 중 몇 번의 요청을 보낼지를 설정합니다. Run Count 0은 무한 반복으로 실행되며, 최대 10,000번의 요청을 설정할 수 있습니다. 여기서 Run Count와 Duration은 하나만 선택할 수 있습니다. 
  라디오 버튼으로 Duration과 Run Count를 선택할 수 있는데, Duration을 선택하면 테스트는 설정된 시간 동안 지속되고, Run Count를 선택하면 설정된 요청 횟수만큼 실행됩니다.



3) Enable Ramp-Up (램프업 기능)
  - Ramp-Up부하를 서서히 증가시키는 방식으로, 부하 테스트를 더 현실적으로 시뮬레이션 할 수 있습니다. 모든 가상 사용자를 한꺼번에 실행시키지 않고, 단계적으로 부하를 올리는 방법입니다.

  - Initial Count: 테스트가 시작할 때의 가상 사용자 수를 설정합니다. 예를 들어 처음에는 5명의 가상 사용자만 요청을 보내기 시작합니다.

  - Incremental Step: 가상 사용자가 얼마나 단계적으로 추가될지 설정합니다. 예를 들어, 10씩 증가한다면, 처음 5명에서 다음 단계에는 15명, 그 다음에는 25명으로 계속해서 증가합니다.

  - Initial Sleep Time: 테스트가 시작되고 얼마 후에 부하를 증가시킬지 설정합니다. 예를 들어, 10초 동안 기다렸다가 부하를 증가시키는 식입니다.

  - Interval: 각 단계 간에 얼마나 기다렸다가 추가 사용자를 증가시킬지 설정합니다. 예를 들어, 30초 간격으로 부하를 증가시킬 수 있습니다. 
 
  - 그래프: 이 설정을 기반으로 부하가 어떻게 증가할지 시각적으로 나타내는 그래프가 표시됩니다. Ramp-Up을 시뮬레이션하기에 편리합니다.



요약
  - Basic Configuration에서 에이전트 수, 가상 사용자 수, 프로세스/스레드 수, 스크립트, 대상 서버, 테스트 시간 또는 실행 횟수 등을 설정합니다.
  - Enable Ramp-Up은 서서히 부하를 증가시키는 기능으로, 가상 사용자 수를 단계적으로 늘려 부하를 더 현실적으로 시뮬레이션 할 수 있습니다.

 

 

 

 

진짜 뭐 더 볼 필요 없겠지 이제...? 본격적으로 진짜 해볼까.

728x90
반응형