티스토리 뷰

서버에 과부하 로직을 반영하고, 임의로 임계치를 올려놓고 테스트하는건 올바른 테스트라고 할 수 없다. 과부하 테스트를 하려면 서버에 요청을 빠르게 엄청나게 많은 양을 보내야 한다. 실제 요청을 만들어 보낼 수 없을 때, Apache Jmeter를 사용하면 된다.

1. Jmeter 란?

앞서 언급한 것 처럼 서버의 성능을 측정할 때 쓰는 툴이다. 대표적으로 스트레스 테스트라고 하는 테스트를 하는데 쓰이고, 서버가 짧은 시간에 얼마나 많은 요청을 처리할 수 있는지 테스트하고 결과를 모니터링 하는데 주로 쓰인다.

이외에도 다양한 기능이 있지만 그건 홈페이지로 가서 알아보도록 하자.

2. 설치

제목에서처럼 윈도우 10 환경에서 설치할 것이다.

  1. 홈페이지에서 Binaries 설치
    • Requries Java 8+라고 명시되어 있듯이, Java 8 이상 버전을 준비하자

  1. 압축 해제
  2. apache-jemeter-5.5 폴더 안의 bin 폴더로 들어가 .bat 파일 실행
  3. Jmeter가 켜지면 TestPlan을 우클릭 하고 Add > Threads (Users) > Thread Group
  4. Thread Group에 설정들이 있는데 내가 설정한 것들만 정리
    - Number of Threads (users) : 쓰레드의 갯수. 예를 들어 몇명의 유저가 동시에 접근 할 것인가를 말함
    - Ramp-up period (Seconds) : 이 유저저들이 몇 초동아 접근하는 것을 테스트할 것인지를 설정
    - Loop Count : 몇번 반복할 것인지 설정. 난 무한정 반복하도록 설정
    - 다른 설정들이 있지만, 굳이 건드리지 않았다. 에러가 났을때 어떻게 할것이냐 쓰레드 설정을 어떻게 할 것이냐? 등이 눈에 띈다.
  5. 좌측 리스트에서 Thread Group 우클릭 > ADD > Sampler > HTTP Request 선택
  6. 요청 보낼 주소와 url과 데이터를 채워 넣는다.
    - Name은 이 리퀘스트의 이름을 내가 정해주는 것
    - Protocol은 http/https를 정해주는 것 같음
    - IP/Port는 말그대로 서버의 IP와 Port를 지정
    - GET이 적힌 셀렉트 박스에 HTTP METHOD 들이 있고, Path에 요청할 URL을 작성한다.
    - 아래 Body Data에 Post로 보낼 request body를 작성할 수 있다.
  7. 결과를 보여줄 Listener를 걸자
    - HTTP Request 우클릭 > Add > Listener > View Results Tree
    - 이외도 그래프같은 Visualization 방식들이 있지만, 가장 직관적으로 보이는 View Ressults Tree를 사용했다.
  8. 설정이 끝났으니 실행한다.
  9. Result Tree에서 결과 확인

3. Windows 10에서 실행시 발생하는 문제

정상적으로 설정을 하고, Jmeter를 실행시켰는데 아래와 같은 에러가 발생했다. 

java.net.BindException: Address already in use: connect


아무리 뜯어봐도 잘못된게 없는데 위와 같은 에러가 발생한다. 다른사람은 간헐적으로 발생하거나 발생하지 않는 경우가 있다고 하는데 난 무조건 발생했다.

When an HTTP request is made, an ephemeral port is allocated for the TCP / IP connection. The ephemeral port range is 32678 – 61000. After the client closes the connection, the connection is placed in the TIME-WAIT state for 60 seconds.If JMeter (HttpClient) is sending thousands of HTTP requests per second and creating new TCP / IP connections, the system will run out of available ephemeral ports for allocation.

 

출처, 대충 해석해보면 대량의 요청을 하면 대기 상태에 빠지는 포트에 발생해, Windows에 기본 할당된 TCP/IP 포트 range를 벗어나게 되어 JMeter에서 에러가 난다는 말이다.

 

이 문제는 서비스에 레지스트리를 수정해주면 해결 가능하다. 재부팅할 필요없으니 참고.

  1. 실행(Win+R)에서 regedit 입력
  2. 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Tcpip\Parameters에서 MaxUserPort 값 우클릭 > 수정 > 10진수 체크한 뒤 65534 로 수정

 

그런데... MaxUserPort가 없는 경우가 있다.(내가 그랬다.)

 

그럴땐, Parameters 페이지 내에서 우클릭하면 새로 만들기가 뜬다. 새로 만들기 > DWORD(32비트값) > 이름을 MaxUserPort 설정 > 2번과 같이 진행하면 된다.

4. 마치며

이걸로 과부하 방어 로직 생성과 테스트까지 마무리를 지었다. 윈도우 환경이라 그런지 뭘 할때마다 자꾸만 문제가 생긴다.. Jenkins 때도 그랬고, WSL-Docker 때도 그랬고 앞으로도 더 문제가 발생할지도 모르겠다. 다음 노트북은 맥북을 진지하게 고민해봐야될거 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함