티스토리 뷰
locust로 끝내려다가 JMeter 찍먹
다운로드 받고, plugin manager 다운받고 ext에 넣고, websocket 전용 plugin까지 추가하는 글은 엄청나게 많으니 아무거나 봐도 됨
이후에 첨부한 파일 open으로 열어서 참고하면 됨
아래 과정은 참고만 하고 자신의 서버 로직에 따라 구현하면 됨
코드가 필요하면 BeanShell Sampler
- 무작위 변수(Random Variable)라는 게 있긴 한데, 이걸로 안될 것 같음
내부의 변수를 다른 Sampler?에서 사용하려면
vars.put("YOUR_VAR", str_java_var);
DB 연결이 필요하면 JDBC Connect
- jdbc 설치 필요한 것 같음, MSSQL
- https://learn.microsoft.com/ko-kr/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15
- sqljdbc_12.8\kor\jars의 *.jar를 D:\apache-jmeter-5.6.3\lib\ext에 복사후 재시작 하면됨
- 드라이버가 없으면 로그에서 드라이버 자체를 못 찾는다고 나옴
쓰레드 이름:Thread Group 1-1
표본 시작 시간:2024-11-14 10:01:21 KST
로드 시간:10
연결 시간:10
대기시간:0
바이트 크기:505
전송 바이트 크기:0
헤더들의 바이트 크기:0
Body의 바이트 크기:505
표본 수:1
오류 수:1
데이터 타입 ("text"|"bin"|""):text
응답 코드:null 0
응답 메시지:java.sql.SQLException: Cannot create PoolableConnectionFactory ("encrypt" 속성이 "true"(으)로 설정되고 "trustServerCertificate" 속성이 "false"(으)로 설정되었지만 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Server에 대한 보안 연결을 설정할 수 없습니다. 오류: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. ClientConnectionId:3a806772-e68b-44b4-88b0-dd9a2dc5e8e9)
쓰레드 이름:Thread Group 1-1
표본 시작 시간:2024-11-14 10:00:25 KST
로드 시간:1
연결 시간:1
대기시간:0
바이트 크기:178
전송 바이트 크기:0
헤더들의 바이트 크기:0
Body의 바이트 크기:178
표본 수:1
오류 수:1
데이터 타입 ("text"|"bin"|""):text
응답 코드:null 0
응답 메시지:java.sql.SQLException: Cannot create PoolableConnectionFactory (속성 trustServerCertificate에 잘못된 부울 값이 포함되어 있습니다. true 또는 false 값만 사용할 수 있습니다.)
- jdbc connect 맨 아래 연결 속성에 MARS_Connection=Yes;TrustServerCertificate=true;Encrypt=no;
쿼리 실행은 JDBC Request
- insert 완료, 질의 타입 update
- 다른곳들과 다르게 생성한 변수를 쿼리에서 사용할때는 좀 다름
${__BeanShell(vars.get("YOUR_VAR"))}
중간에 결과 필요하면 View Results Tree 추가해서 봐야함
Header추가 필요하면 HTTP Header Manager 추가
- 헤더 Value에는 ${VAR} 로 사용하면 됨
추가한 헤더와 함께 Websocket Open
서버메시지 수신 및 응답을 JSON Extractor로 처리하여 변수로 저장
저장한 변수를 json에 포함하여 request
특정 Sampler 반복은 Thread Group에 Add>Logic Controller>While or Loop 추가 후 해당 Controller에 Sampler 드래그 해서 넣어주기
While or Loop 반복의 Sleep을 주려면 Add>Timer>Constant or Uniform
- 4초 안쪽의 랜덤한 시간에
연결이 갑자기 다 끊겨서 보니, 이렇고 찾아보니 서버에서 ping 보냈는데 client에서 pong 안해서 그런듯
Thread Name:Thread Group 1-10
Sample Start:2024-11-14 11:51:11 KST
Load time:0
Connect Time:0
Latency:0
Size in bytes:6
Sent bytes:599
Headers size in bytes:2
Body size in bytes:4
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):
Response code:Sampler error
Response message:Sampler error: java.lang.ClassCastException: class eu.luminis.websocket.PingFrame cannot be cast to class eu.luminis.websocket.DataFrame (eu.luminis.websocket.PingFrame and eu.luminis.websocket.DataFrame are in unnamed module of loader org.apache.jmeter.DynamicClassLoader @548c4f57)
SampleResult fields:
ContentType:
DataEncoding: null
websocket ping/pong sampler 추가(ping 응답을 위한)
- 서버랑 타이밍이 안 맞는지 별 효과 없음
Thread Name:Thread Group 1-1
Sample Start:2024-11-14 12:09:07 KST
Load time:1
Connect Time:0
Latency:0
Size in bytes:0
Sent bytes:0
Headers size in bytes:0
Body size in bytes:0
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):
Response code:Websocket I/O error
Response message:WebSocket I/O error: 현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다
SampleResult fields:
ContentType:
DataEncoding: null
Websocket ping/pong frame filter(add>config element)
- 일단 both 체크, 그리고 아래 automatically respond 체크
이러니까 해결됨
thread: 64 ramp-up:64
- 1초에 하나씩 늘어나도록 일단 테스트 문제 없음
클라이언트에 따른 서버 성능이 궁금해서 물어보니 PerfMon 쓰라고함
plugin manager에서 perfmon 다운로드
- 원래 available에 있음
서버에서 실행할 agent 다운로드
http://jmeterplugins.com/downloads/index.html
이걸 서버로 잘 옮겨서 sh파일 실행하면 4444로 열림
나는 docker compose에 volume 추가해서 다시 빌드시킴
그리고 실행하려면 java 필요함, 지금은 dockerfile에 설치하는 과정은 넣지 않았음
docker exec -it <container_id> /bin/sh
apt update
apt install -y openjdk-17-jre
cd jmeter_perfmon_agent
chmod +x startAgent.sh
./startAgent.sh
그냥 저냥 나오기는 하는데 y축이 백분율이 아니라서 직관적이지가 않음, 설정을 못하겠음
그리고 x축도 opened socket connection count면 좋을텐데
thread:512개 1~4초 간격으로 메시지 주고 받는 경우에 locust에 비하면 훨씬 가벼움, peak가 6.3%정도, i7-8700
locust가 2~30%정도 나왔었음
일단 각 thread마다 동작 기록이 모두 있어서 너무 편함
그러니까 뒤에서 에러난 thread가 보이면 해당 thread를 전부 찾아서 거슬러 올라갈 수 있음
docker exec -it <container_id> /bin/sh
apt update
apt install -y openjdk-17-jre
cd jmeter_perfmon_agent
chmod +x startAgent.sh
./startAgent.sh
thread:512, ramp-up:32, loop: 10, up:16/s(512/32)
thread:512, ramp-up:32, loop:inf, up:16/s(512/32)
'Python' 카테고리의 다른 글
locust 써보기(fastapi+websocket+nginx) (0) | 2024.11.07 |
---|---|
pymssql 연결 안 됨 (0) | 2024.09.02 |
[Python] onedrive file upload example(파이썬 원 드라이브 파일 업로드 예제) (0) | 2024.02.08 |
python class 생성 시 사용한 변수의 값을 내부에서 참조함 (0) | 2023.12.02 |
ModuleNotFoundError: No module named 'MySQLdb' (0) | 2023.08.09 |
티스토리 방명록
- Total
- Today
- Yesterday
Contact: j0n9m1n1@gmail.com