pinpoint & ngrinder 삽질 기록

hyng·2022년 12월 25일
0

smilegate-winter-dev-camp

목록 보기
4/15

pinpoint & ngrinder를 적용하는 과정에서 발생했던 문제와 해결한 과정을 기록한 글입니다.
맞는 해결 방법은 아닐 수 있지만 저처럼 헤매는 분들에게 도움이 될까 해서 남깁니다😂

개발 환경

  • mac m1
  • jdk 11

ngrinder 로컬에 적용

ngrinder web에서 스크립트나 테스트 탭을 누를 때마다 ERROR FileEntryRepository.java:192 : Error while fetching files from SVN for admin 계속 발생하고 페이지가 뜨지 않는 문제가 발생했다. 버전 문제인가 싶어서 여러 버전(3.4.3, 3.5.5-p1, 3.5.6, 3.5.7) 시도해 봤지만 실패. jdk 버전도 바꿔봄 하지만 실패.
구글링해서 나온 방법 적용해 봤으나 실패.

그래서 aws ec2 서버에 적용

  • AMI ID: amzn2-ami-kernel-5.10-hvm-2.0.20221210.1-x86_64-gp2
  • t2.micro

-> 성공🔥

로컬에는 스프링 부트 서버 & mysql & redis를 돌리고 ec2 서버에 ngrinder controller와 ngrinder agent를 돌려서 테스트하려고 함.
포트포워딩 설정은 번거로우니 외부에서 로컬 환경에 쉽게 접근할 수 있게 해주는 ngrok 사용.
자세한 내용은 링크 참조

이렇게 하니 스프링 부트 서버로 요청을 보내는 건 성공했지만.. 이상한 결과가 나오기 시작
무려 TPS 1, MTT 3,194..

vusr를 4만 해도 429 응답을 보냈다.

(12/30 대규모 시스템 설계 기초를 읽는 중 처리율 제한 장치 설계를 보게 되었는데, 이 책을 읽고 이 문제를 만났다면 문제 원인을 더 빠르게 찾았을 것 같다...)

스프링 부트 서버의 문제인지 확인해 보기 위해 구글링을 통해 시간이 오래 걸릴 것으로 예상되는 부분을 주석 처리해 보았다.
1. 비밀번호 암호화(bcrypt 해시 함수 돌리는 횟수 조정) 참고
-> 참고 글에서처럼 10에서 4로 조정해 봐도 차이는 미미했음.
2. mysql 조회 부분, redis 삽입 부분
이 부분을 주석 처리하고 테스트를 돌려도 차이는 미미했음.

스프링 부트 서버의 문제는 아닐 것이라고 생각이 되었고 ngrinder 권장 사양에 비해 떨어지는 ec2 서버의 문제인가 하는 생각이 들었음.
ec2 프리 티어는 vCPU 1, 메모리 1GiB, 네트워크 1Gbps 그리고 ec2 서버 하나에 agent, controller 같이 돌리고 있었음.

구글에 요청을 보내보니 vuser를 높게 설정해 봐도 문제없었음.

ngrok의 문제인가 싶어 jmeter를 사용해서 ngrok을 통해서 요청을 보낼 때와 그냥 localhost로 요청을 보낼 때를 테스트해 봄.
1. ngrok

  1. localhost

ngrok이 문제였던 듯. 그래서 ngrok 을 사용하지 않고 포트포워딩 설정을 해서 요청을 보내기로 결정.

로컬에 있는 스프링 서버에 요청을 보내기 위해 포트포워딩 설정.

집에는 메인 공유기가 있고 메인 공유기에 랜선을 연결하여 방에 라우팅하는 서브 공유기가 있고 개발 pc는 서브 공유기 무선랜에 연결되어 있는 구조.

  1. 서브 공유기에서 개발 pc에 할당한 내부 ip가 변경되지 않도록 ip 고정
  2. 서브 공유기에서 특정 포트로 요청이 들어오면 개발 pc 특정 포트로 전달하도록 설정
  3. 메인 공유기에서 특정 포트로 요청이 들어오면 서브 공유기 특정 포트로 전달하도록 설정

전체적인 과정은 이렇게 되고 자세한 내용은 링크 참조

다시 테스트를 해보니 다음의 결과를 얻을 수 있었음.

pinpoint 로컬에 적용

다음 링크들을 참조하여 설치
https://lannstark.tistory.com/202
https://yumserv.tistory.com/418
https://hays99.tistory.com/224

pinpoint-agent-2.4.2 / pinpoint-root-config에 다음 설정 추가.
참고:
https://github.com/pinpoint-apm/pinpoint/issues/4116
https://github.com/pinpoint-apm/pinpoint/tree/master/plugins/spring-boot

profiler.applicationservertype=SPRING_BOOT
profiler.tomcat.conditional.transform=false
profiler.springboot.enable=true
profiler.springboot.bootstrap.main=org.springframework.boot.loader.JarLauncher, org.springframework.boot.loader.WarLauncher, org.springframework.boot.loader.PropertiesLauncher

그런데 실행하니
Transformer:com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformerGuardDelegate threw an exception 이 예외가 반복적으로 발생.

https://github.com/pinpoint-apm/pinpoint/issues/8928
https://pinpoint-apm.gitbook.io/pinpoint/main

위 링크 확인하여 pinpoint가 지원하는 spring boot 버전과 애플리케이션의 spring boot 버전이 달라서 문제가 발생하는 것이 의심됨.

그래서 다음 링크 참조하여 스프링 부트 버전을 3.0.0(변경 전) -> 2.5.7 (변경 후)로 변경하니 에러가 발생하지 않고 잘 실행되었음.
https://github.com/pinpoint-apm/pinpoint/pull/8426
https://github.com/pinpoint-apm/pinpoint/tree/master/plugins/spring-boot

profile
공부하고 알게 된 내용을 기록하는 블로그

0개의 댓글