SW/Java

Java 21의 가상 스레드 혁신: JMeter 성능 극대화를 위한 완벽한 가이드

얇은생각 2024. 2. 2. 07:30
반응형

가상 스레드를 활용함으로써 JMeter는 무거운 부하를 처리할 때에도 결함 없이 원활하고 효율적으로 작동할 수 있게 되었습니다.

Apache JMeter는 다양한 서비스, 특히 웹 애플리케이션의 로드 및 성능 테스트에 사용되는 오픈 소스 자바 기반 도구입니다. HTTP, HTTPS, FTP 등과 같은 여러 프로토콜을 지원합니다. JMeter는 서버의 많은 부하를 시뮬레이션하여 다양한 조건에서 성능을 분석할 수 있습니다. 테스트 구성을 위한 GUI 모드와 비 GUI 모드를 모두 제공하며 테스트 결과를 다양한 형식으로 표시할 수 있습니다. 또한 JMeter는 분산 테스트를 지원하여 여러 테스트 스레드를 동시에 처리할 수 있습니다. 플러그인을 통해 기능을 확장할 수 있으므로 성능 테스트에서 다재다능하고 널리 사용되는 도구입니다.

JMeter는 요청을 병렬로 실행하는 방법을 제어하는 탁월한 동시성 모델로 인해 다른 테스트 도구와 차별화됩니다. JMeter의 동시성 모델은 자바 및 기타 여러 프로그래밍 언어에서 병렬 처리를 위한 표준 방법으로 널리 알려진 스레드 풀(Thread Pool)에 의존합니다. 그러나 다른 이점과 마찬가지로 JMeter의 동시성 모델에는 리소스 집약적인 특성이라는 상당한 절충점이 있습니다.

JMeter에서 각 스레드는 자바 스레드에 해당하며, 그 실행을 위해 운영체제(OS) 스레드를 더 활용합니다. OS 스레드는 동시 작업을 수행하는 데는 효과적이지만 컨텍스트 전환 시 메모리 사용량과 CPU 사용량 측면에서 나타나는 특정 수준의 가중치를 가지고 있습니다. 이러한 특성은 JMeter의 성능에 주목할 만한 문제입니다. 또한 특정 운영체제에서는 생성할 수 있는 총 스레드 수에 엄격한 제한을 적용하여 JMeter의 기능에 암묵적인 제한을 가합니다.

 

 

Java 21을 구출하기 위해 공개

지난 몇 년 동안 자바 커뮤니티 내에서 상당한 주목을 받은 프로젝트룸은 JEP-444와 함께 여러 번의 초기 미리보기 출시를 거쳐 마침내 자바 21에 통합되었습니다.

자바 스레드

 

 

경량 스레드 또는 사용자 모드 스레드라고도 알려진 Java의 가상 스레드는 프로젝트 룸(Project Loom)의 실험 기능으로 소개되고 있으며, 이 기능은 현재 Java 21에 공식적으로 포함되어 있습니다.

이 기능의 세부 사항은 흥미롭지만, 현재로서는 더 자세히 설명하지 않기 위해 오늘 논의의 주요 초점은 아닙니다.

 

 

제이미터

코드 리뷰는 스레드 그룹 클래스를 적용하여 새로운 스레드 그룹을 생성하는 간단한 과정을 보여줍니다. 여기서는 우리가 수정하고자 하는 스레드 그룹 JMeter 클래스의 로직을 간단히 복제했습니다.

주목해야 할 주요 방법은 스레드 생성을 담당하는 startNewThread입니다.

이 방법에서 한 줄을 변경했습니다:

 

코드의 원래 행:

Thread newThread = new Thread(jmThread, jmThread.getThreadName());

 

 

다음과 같이 교체되었습니다:

Thread newThread = Thread.ofVirtual()
.name(jmThread.getThreadName())
 .unstarted(jmThread);

 

이번 수정에서는 기존 스레드를 생성하는 대신 자바의 프로젝트룸에 소개된 가상 스레드를 생성합니다. 이 변경을 통해 보다 가볍고 효율적인 스레드 처리가 가능합니다.

또한 addNewThread 메서드에서 동기화된 블록을 제거하고 다른 몇 곳에서 유사한 스레드 생성 로직을 업데이트하는 등의 다른 수정 사항도 있습니다.

 

 

셋업

nginx를 빠르게 설정했는데, nginx는 항상 200ok 응답을 반환합니다:

# nginx.conf 
location /test {
    return 200 'OK';
 }

 

 

2. 가상 스레드 그룹 요소 추가:

가상 스레드 그룹

 

3. 스레드 구성: 오른쪽 스레드 그룹에 대한 가상 스레드 속성 헤더 제목이 표시됩니다.

스레드 구성

 

 

4. 그리고 최종 결과:

최종 결과

 

서버의 응답성이나 최대 5만 명의 사용자(튜닝을 통해 쉽게 달성할 수 있는)까지 확장할 수 있는 서버의 응답성에 있지 않았습니다. 오히려 저는 서버의 응답이 성공적이든 실패적이든 상관없이 JMeter가 어떻게 부하를 생성하고 처리하는지 관찰하는 것에 더 관심이 있었습니다.

 

 

요약

JMeter는 주로 네트워크 요청과 관련된 I/O 바인딩 특성 때문에 전통적으로 자원 집약적이었습니다. 그러나 가상 스레드의 도입으로 성능이 크게 향상되었습니다. 가상 스레드를 활용하여 JMeter는 무거운 부하를 처리할 때에도 결함 없이 원활하고 효율적으로 작동할 수 있었습니다.

반응형