시리즈 설명
해시 알고리즘 은닉화를 위해 의도적으로 인증 과정을 2초로 고정 (실제 해싱 시간은 0.5초)
딜레이를 주기 위해 Thread.sleep 메서드를 사용했는데, 초당 1000개의 요청을 보냈을 때 평균 응답시간이 35~40초가 나옴
이는 보안과 사용성의 균형이 무너진 것이며 개선이 필요함
현재 성능을 분석하고 앞으로 어떻게 최적화해나가야 할지에 대한 시리즈
서론
처음에는 초당 1000개 요청에 대해 어떻게 성능을 개선할까만을 고민했었다.
그래서 Thread.sleep에 대해 알아보고 논블로킹 방식으로 어떻게 개선하는지, 어떻게 스레드 풀을 튜닝해야 하는지 등을 알아봤다.
하지만 이러한 노력은 "그래서 현재 어떻게 동작하는데?"로 귀결되었다.
현재 어떤 상태로 동작을 하는지 파악을 할 수 있어야 어느 지점이 병목이고 어떻게 튜닝을 해나갈지 갈피를 잡을 수 있을 것이라 생각했다.
따라서 나만의 프로파일링 선택 기준을 정하고 툴을 사용해보는 것을 목표로 했다.
기준
CPU, 메모리, 스레드 등을 분석하는 것은 아마 모든 툴이 제공할 것이다. 따라서, 그 외의 것을 기준으로 잡았다.
1. 단순하고 빠른지
자잘한 것들이 포함되어 성능이 느린 것보다 필요한 기능만 제공하고 빠른 것이 나에게는 중요하다.
2. 서버 어플리케이션 성능에 영향을 주는지
프로파일링 툴은 서버 어플리케이션이 살아있는 동안 유지하게 된다. 따라서, 서버 성능에 영향을 적게 주는 것이 중요하다.
3. Java1.8 에서 동작하는지
분석하는 어플리케이션은 17버전이지만, 어떤 기술의 숙련도를 올린다면 넓은 범위의 버전을 커버하는 툴을 사용하는 것이 좋다.
4. 무료인지
난 돈이 없다.
Async Profiler
이 툴은 위 조건을 만족한다. 특히 오버헤드가 적어 서버 어플리케이션 성능에 영향을 적게 준다는 것이 가장 큰 특징이다.
https://github.com/async-profiler/async-profiler?tab=readme-ov-file
GitHub - async-profiler/async-profiler: Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events
Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events - async-profiler/async-profiler
github.com
하지만, 사용하기 단순하다는 것에 대해서는 잘 모르겠다. 오히려 사용법에 대한 러닝커브가 조금 있어보인다.
그럼에도 많은 유저가 사용하는 신뢰성이 높은 툴이며, 나머지 조건을 충족하기 때문에 사용하기로 결정했다.
'Server > Java' 카테고리의 다른 글
| PCW(Post Compile Weaving) 적용법 및 테스트 (0) | 2025.08.15 |
|---|---|
| rt.jar, ee.jar (2) | 2025.04.27 |
| JAR (Java ARchive) - 개념, 구성 요소, 생성, 라이브러리 활용 (1) | 2025.04.25 |