웹사이트 검색

Apache JMeter를 사용하여 웹 서버에서 부하 테스트를 수행하는 방법


소개

이 자습서에서는 Apache JMeter를 사용하여 웹 애플리케이션 환경에서 기본 로드 및 스트레스 테스트를 수행하는 방법을 살펴봅니다. 그래픽 사용자 인터페이스를 사용하여 테스트 계획을 작성하고 웹 서버에 대해 테스트를 실행하는 방법을 보여줍니다.

JMeter는 로드 테스트 및 성능 측정을 위해 설계된 오픈 소스 데스크탑 Java 애플리케이션입니다. 다양한 시나리오의 부하를 시뮬레이션하고 CSV 및 XML 파일과 그래프를 비롯한 여러 가지 방법으로 성능 데이터를 출력하는 데 사용할 수 있습니다. 100% Java이기 때문에 Java 6 이상을 지원하는 모든 OS에서 사용 가능합니다.

전제 조건

이 자습서를 따르려면 JMeter를 실행할 수 있는 컴퓨터와 부하 테스트를 수행할 웹 서버가 있어야 합니다. 로드를 처리할 수 있는지 확인하지 않는 한 프로덕션 서버에 대해 이러한 테스트를 실행하지 마십시오. 그렇지 않으면 서버 성능에 부정적인 영향을 미칠 수 있습니다.

이 자습서의 테스트를 자신의 웹 응용 프로그램에 적용할 수 있습니다. 예를 들어 테스트 중인 웹 서버는 NYC2 DigitalOcean Datacenter의 LEMP 스택에서 WordPress를 실행하는 CPU 1개/512MB VPS입니다. JMeter 컴퓨터는 NYC의 DigitalOcean 사무실에서 실행되고 있습니다(테스트 대기 시간과 관련됨).

JMeter 테스트 결과는 JMeter에서 사용할 수 있는 시스템 리소스(CPU 및 RAM)와 JMeter와 테스트 중인 웹 서버 간의 네트워크를 비롯한 다양한 요인에 의해 왜곡될 수 있습니다. 결과를 왜곡하지 않고 JMeter가 생성할 수 있는 로드의 크기는 비그래픽 모드에서 테스트를 실행하거나 로드 생성을 여러 JMeter 서버에 분산하여 늘릴 수 있습니다.

JMeter 설치

Apache JMeter를 데스크톱 애플리케이션으로 사용하고 있고 사용 중인 데스크톱 OS가 매우 다양하기 때문에 특정 OS에 대한 JMeter 설치 단계는 다루지 않습니다. 그렇게 말하면 JMeter는 설치가 매우 쉽습니다. 가장 쉬운 설치 방법은 패키지 관리자(예: apt-get 또는 Homebrew)를 사용하거나 공식 사이트에서 JMeter 바이너리를 다운로드 및 압축 해제하고 Java(버전 6 이상)를 설치하는 것입니다.

다음은 JMeter를 실행하는 데 필요한 아카이브 링크가 포함된 소프트웨어 목록입니다.

  • OpenJDK(6 이상)
  • 아파치 J미터

Java 설치 방법에 따라 PATH 환경 변수에 Java bin 디렉토리를 추가해야 JMeter가 Java 및 keytool 바이너리를 찾을 수 있습니다.

또한 JMeter를 설치한 경로(아카이브를 해제한 디렉토리)를 $JMETER_HOME이라고 합니다. 따라서 Linux 또는 Unix 기반 OS를 사용하는 경우 JMeter 바이너리는 $JMETER_HOME/bin/jmeter에 있습니다. Windows를 실행 중인 경우 $JMETER_HOME/bin/jmeter.bat를 실행할 수 있습니다.

참고로 이 튜토리얼을 작성할 때 다음 소프트웨어 버전을 사용했습니다.

  • Oracle Java 7 업데이트 60, 64비트
  • JMeter 2.11

JMeter를 설치하고 실행했으면 테스트 계획 작성으로 넘어갑시다!

기본 테스트 계획 수립

JMeter를 시작하면 테스트 계획이 비어 있는 그래픽 사용자 인터페이스가 표시되어야 합니다.

테스트 계획은 부하 테스트를 시뮬레이션하는 방법을 결정하는 일련의 테스트 구성 요소로 구성됩니다. 이러한 구성 요소 중 일부를 테스트 계획에 추가할 때 어떻게 사용할 수 있는지 설명하겠습니다.

스레드 그룹 추가

먼저 테스트 계획스레드 그룹을 추가합니다.

  1. 테스트 계획을 마우스 오른쪽 버튼으로 클릭
  2. 마우스를 추가 >
  3. 위로 가져갑니다.
  4. 스레드(사용자) >
  5. 위로 마우스를 가져갑니다.
  6. 스레드 그룹을 클릭합니다.

스레드 그룹에는 로드 테스트에 영향을 미치는 세 가지 특히 중요한 속성이 있습니다.

  • Number of Threads (users): JMeter가 시뮬레이션을 시도할 사용자 수입니다. 이것을 50으로 설정
  • 램프 업 기간(초): JMeter가 스레드 시작을 분배하는 기간입니다. 이것을 10으로 설정합니다.
  • Loop Count: 테스트를 실행할 횟수입니다. 이 설정을 1로 두십시오.

HTTP 요청 기본값 추가

HTTP 요청 기본값 구성 요소는 테스트 계획에서 HTTP 요청에 대한 기본값을 설정하는 데 사용됩니다. 이는 테스트의 일부로 동일한 서버에 여러 HTTP 요청을 보내려는 경우에 특히 유용합니다. 이제 HTTP 요청 기본값스레드 그룹에 추가해 보겠습니다.

  1. 스레드 그룹을 선택한 다음 마우스 오른쪽 버튼으로 클릭
  2. 마우스를 추가 >
  3. 위로 가져갑니다.
  4. 구성 요소 >
  5. 위로 마우스를 가져갑니다.
  6. HTTP 요청 기본값을 클릭합니다

HTTP 요청 기본값의 웹 서버 섹션에서 서버 이름 또는 IP 필드에 테스트할 웹 서버의 이름 또는 IP 주소를 입력합니다. 여기에서 서버를 설정하면 이 스레드 그룹의 나머지 항목에 대한 기본 서버가 됩니다.

HTTP 쿠키 관리자 추가

웹 서버가 쿠키를 사용하는 경우 스레드 그룹에 HTTP 쿠키 관리자를 추가하여 쿠키 지원을 추가할 수 있습니다.

  1. 스레드 그룹을 선택한 다음 마우스 오른쪽 버튼으로 클릭
  2. 마우스를 추가 >
  3. 위로 가져갑니다.
  4. 구성 요소 >
  5. 위로 마우스를 가져갑니다.
  6. HTTP 쿠키 관리자를 클릭합니다

HTTP 요청 샘플러 추가

이제 각 스레드(사용자)가 액세스할 페이지 요청을 나타내는 Thread GroupHTTP 요청 샘플러를 추가하려고 합니다.

  1. 스레드 그룹을 선택한 다음 마우스 오른쪽 버튼으로 클릭
  2. 마우스를 추가 >
  3. 위로 가져갑니다.
  4. 마우스를 샘플러>
  5. 위로 가져가세요.\n
  6. HTTP 요청을 클릭합니다

HTTP 요청의 HTTP 요청 섹션에서 각 스레드(사용자)가 요청할 항목으로 경로를 입력합니다. 이를 /로 설정하여 각 스레드가 서버의 홈페이지에 액세스하도록 합니다. HTTP 요청 기본값 항목에 서버가 이미 지정되어 있으므로 이 항목에 서버를 지정할 필요가 없습니다.

참고: 테스트의 일부로 더 많은 HTTP 요청을 추가하려면 이 단계를 반복하십시오. 모든 스레드는 이 테스트 계획의 모든 요청을 수행합니다.

테이블 리스너에 보기 결과 추가

JMeter에서 리스너는 부하 테스트 결과를 출력하는 데 사용됩니다. 다양한 리스너를 사용할 수 있으며 플러그인을 설치하여 다른 리스너를 추가할 수 있습니다. 읽기 쉽기 때문에 테이블을 사용합니다.

  1. 스레드 그룹을 선택한 다음 마우스 오른쪽 버튼으로 클릭
  2. 마우스를 추가 >
  3. 위로 가져갑니다.
  4. 마우스를 리스너 >
  5. 위로 가져갑니다.
  6. 표에서 결과 보기를 클릭합니다

파일 이름에 대한 값을 입력하여 결과를 CSV 파일로 출력할 수도 있습니다.

기본 테스트 계획 실행

이제 기본 테스트 계획을 설정했으므로 실행하고 결과를 확인하겠습니다.

먼저 파일을 클릭한 다음 저장을 클릭하여 테스트 계획을 저장한 다음 원하는 파일 이름을 지정합니다. 그런 다음 왼쪽 창에서 표에서 결과 보기를 선택한 다음 기본 메뉴에서 실행을 클릭한 다음 시작을 클릭합니다(또는 녹색 시작 메인 메뉴 아래 화살표). 테스트가 다음과 같이 실행될 때 테이블에 테스트 결과가 표시되어야 합니다.

결과 해석

모든 요청의 상태가 "성공\(확인 표시가 있는 녹색 삼각형으로 표시됨)인 것을 볼 수 있습니다. 그 후 가장 관심 있는 열은 Sample Time(ms)입니다. )Latency(예시에는 표시되지 않음) 열입니다.

  • 대기 시간: JMeter가 요청을 보낸 시점과 초기 응답을 받은 시점 사이에 경과된 밀리초 수
  • 샘플 시간: 서버가 요청을 완전히 처리하는 데 걸린 밀리초 수(응답 + 대기 시간)

생성된 테이블에 따르면 Sample Time의 범위는 128-164ms입니다. 이것은 기본 홈페이지(약 55KB)에 대한 합리적인 응답 시간입니다. 예제에서 설명한 것처럼 웹 응용 프로그램 서버가 리소스에 어려움을 겪고 있지 않은 경우 샘플 시간은 주로 지리적 거리(일반적으로 대기 시간 증가) 및 요청된 항목의 크기(전송 시간 증가)의 영향을 받습니다. 개인 결과는 예시와 다를 수 있습니다.

따라서 우리 서버는 수용 가능한 응답과 함께 10초(초당 5회) 동안 55KB WordPress 홈페이지에 액세스하는 50명의 사용자 시뮬레이션에서 살아남았습니다. 스레드 수를 늘리면 어떻게 되는지 봅시다.

부하 증가

10초 동안 80개의 스레드로 동일한 테스트를 해보자. 왼쪽 창의 스레드 그룹 항목에서 스레드(사용자) 수를 80으로 변경합니다. 이제 표에서 결과 보기를 클릭합니다. 그런 다음 시작을 클릭하십시오. 예제 서버에서 결과는 다음 테이블입니다.

보시다시피 샘플 시간이 거의 1초로 증가했으며 이는 웹 응용 프로그램 서버가 요청으로 인해 과부하되기 시작했음을 나타냅니다. VPS에 로그인하여 부하 테스트 중 리소스 사용량을 간단히 살펴보겠습니다.

SSH를 통해 웹 서버에 로그인하고 top을 실행합니다.

top

사용자가 서버를 적극적으로 사용하지 않는 한 Cpu(s) % 사용자 사용량(us)이 매우 낮거나 0%이고 Cpu(s) % 유휴( >id)는 다음과 같이 99% 이상이어야 합니다.

이제 JMeter에서 테스트를 다시 시작한 다음 웹 서버의 SSH 세션으로 다시 전환하십시오. 리소스 사용량이 증가해야 합니다.

이 예의 경우 CPU % 사용자 사용량은 94%이고 시스템 사용량(sy)은 4.7%이며 유휴 상태는 0%입니다. 위의 이미지에 표시된 것처럼 메모리가 부족하지 않으므로 CPU 성능이 부족하여 성능이 저하됩니다! 또한 WordPress를 제공하는 php5-fpm 프로세스가 대부분의 CPU(약 96% 결합)를 사용하고 있음을 알 수 있습니다.

10초 안에 80명의 사용자에 대한 이 시뮬레이션의 요구 사항을 충족하려면 CPU를 늘리거나 서버 설정을 최적화하여 CPU를 적게 사용해야 합니다. 워드프레스의 경우 MySQL 데이터베이스(CPU의 일부 사용)를 다른 서버로 옮길 수 있고 캐싱(CPU 사용량 감소)을 구현할 수도 있습니다.

궁금한 경우 테스트에서 스레드 수를 조정하여 서버가 성능 저하를 나타내기 전에 처리할 수 있는 스레드 수를 확인할 수 있습니다. 1 CPU 드롭릿 예제의 경우 10초 동안 72개의 스레드를 사용할 때까지 제대로 작동합니다.

결론

JMeter는 병목 현상을 줄이고 성능을 향상시키기 위해 웹 응용 프로그램 서버 설정을 개선하는 방법을 결정하는 데 매우 유용한 도구가 될 수 있습니다. 이제 JMeter의 기본 사용법에 익숙해졌으므로 다양한 시나리오에서 서버의 성능을 측정하기 위한 새로운 테스트 계획을 자유롭게 만드십시오.

예제로 사용한 테스트는 일반 사용자의 사용 패턴을 정확하게 반영하지 않지만 JMeter에는 자신의 환경에서 유용할 수 있는 다양한 테스트를 수행할 수 있는 도구가 있습니다. 예를 들어 JMeter는 애플리케이션에 로그인하는 사용자, 클라이언트 측 캐싱 및 URL 재작성으로 사용자 세션 처리를 시뮬레이트하도록 구성할 수 있습니다. 원하는 시나리오를 구축하는 데 도움이 되는 다른 많은 기본 제공 샘플러, 수신기 및 구성 도구가 있습니다. 또한 http://jmeter-plugins.org/에서 다운로드할 수 있는 기능을 향상시키는 JMeter 플러그인이 있습니다.