티스토리 뷰
서버에 과부하 로직을 반영하고, 임의로 임계치를 올려놓고 테스트하는건 올바른 테스트라고 할 수 없다. 과부하 테스트를 하려면 서버에 요청을 빠르게 엄청나게 많은 양을 보내야 한다. 실제 요청을 만들어 보낼 수 없을 때, Apache Jmeter를 사용하면 된다.
1. Jmeter 란?
앞서 언급한 것 처럼 서버의 성능을 측정할 때 쓰는 툴이다. 대표적으로 스트레스 테스트라고 하는 테스트를 하는데 쓰이고, 서버가 짧은 시간에 얼마나 많은 요청을 처리할 수 있는지 테스트하고 결과를 모니터링 하는데 주로 쓰인다.
이외에도 다양한 기능이 있지만 그건 홈페이지로 가서 알아보도록 하자.
2. 설치
제목에서처럼 윈도우 10 환경에서 설치할 것이다.
- 홈페이지에서 Binaries 설치
- Requries Java 8+라고 명시되어 있듯이, Java 8 이상 버전을 준비하자
- 압축 해제
- apache-jemeter-5.5 폴더 안의 bin 폴더로 들어가 .bat 파일 실행
- Jmeter가 켜지면 TestPlan을 우클릭 하고 Add > Threads (Users) > Thread Group
- Thread Group에 설정들이 있는데 내가 설정한 것들만 정리
- Number of Threads (users) : 쓰레드의 갯수. 예를 들어 몇명의 유저가 동시에 접근 할 것인가를 말함
- Ramp-up period (Seconds) : 이 유저저들이 몇 초동아 접근하는 것을 테스트할 것인지를 설정
- Loop Count : 몇번 반복할 것인지 설정. 난 무한정 반복하도록 설정
- 다른 설정들이 있지만, 굳이 건드리지 않았다. 에러가 났을때 어떻게 할것이냐 쓰레드 설정을 어떻게 할 것이냐? 등이 눈에 띈다. - 좌측 리스트에서 Thread Group 우클릭 > ADD > Sampler > HTTP Request 선택
- 요청 보낼 주소와 url과 데이터를 채워 넣는다.
- Name은 이 리퀘스트의 이름을 내가 정해주는 것
- Protocol은 http/https를 정해주는 것 같음
- IP/Port는 말그대로 서버의 IP와 Port를 지정
- GET이 적힌 셀렉트 박스에 HTTP METHOD 들이 있고, Path에 요청할 URL을 작성한다.
- 아래 Body Data에 Post로 보낼 request body를 작성할 수 있다. - 결과를 보여줄 Listener를 걸자
- HTTP Request 우클릭 > Add > Listener > View Results Tree
- 이외도 그래프같은 Visualization 방식들이 있지만, 가장 직관적으로 보이는 View Ressults Tree를 사용했다. - 설정이 끝났으니 실행한다.
- 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에서 에러가 난다는 말이다.
이 문제는 서비스에 레지스트리를 수정해주면 해결 가능하다. 재부팅할 필요없으니 참고.
- 실행(Win+R)에서 regedit 입력
- 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Tcpip\Parameters에서 MaxUserPort 값 우클릭 > 수정 > 10진수 체크한 뒤 65534 로 수정
그런데... MaxUserPort가 없는 경우가 있다.(내가 그랬다.)
그럴땐, Parameters 페이지 내에서 우클릭하면 새로 만들기가 뜬다. 새로 만들기 > DWORD(32비트값) > 이름을 MaxUserPort 설정 > 2번과 같이 진행하면 된다.
4. 마치며
이걸로 과부하 방어 로직 생성과 테스트까지 마무리를 지었다. 윈도우 환경이라 그런지 뭘 할때마다 자꾸만 문제가 생긴다.. Jenkins 때도 그랬고, WSL-Docker 때도 그랬고 앞으로도 더 문제가 발생할지도 모르겠다. 다음 노트북은 맥북을 진지하게 고민해봐야될거 같다.
'개발 > 개발팁' 카테고리의 다른 글
Error instantiating class 에러 (0) | 2023.01.25 |
---|---|
포스트맨(Postman) API 반복 요청하기 (0) | 2023.01.22 |
[Javascript] Object.isEmpty (0) | 2023.01.18 |
[Javascript] Object Copy, structuredClone(), 깊은 복사 (0) | 2023.01.18 |
[LINUX] LOGROTATE & CRON (0) | 2023.01.09 |
- Total
- Today
- Yesterday
- Spring
- AOP
- springboot
- GIT
- 람다
- 후쿠오카
- openAI API
- Elastic cloud
- Kotlin
- EKS
- serverless
- java
- lambda
- Log
- docker
- elasticsearch
- AWS EC2
- 티스토리챌린지
- OpenAI
- OpenFeign
- MySQL
- cache
- 오블완
- 스프링부트
- AWS
- S3
- CloudFront
- terraform
- JWT
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |