Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다형성
- 알고리즘
- 인플레이션
- 프로그래머스
- 주린이
- 제태크
- 미국주식
- XLF
- 객체지향
- S&P500
- 접근제어자
- object
- 기업분석
- 금리인상
- mco
- 무디스
- 자바
- etf
- 주식
- 배당성장
- 금리인하
- 현금흐름표
- 그리디 알고리즘
- FCF
- 잉여현금흐름
- javascript
- StringBuffer
- 백준
- Java
- 오버라이딩
Archives
- Today
- Total
오늘의하루
[SourceCode.io] 3차 성능 테스트 : 분석 및 해결책 본문
반응형
개선 사항
- 프로세스 단계 간소화: 불필요한 프로세스 단계를 제거하고, 필요한 작업을 더 효율적으로 처리하기 위해 프로세스를 재구성했습니다. 이로써 프로세스의 실행 속도를 향상시켰습니다.
- String 객체 생성 최소화: 불필요한 String 객체 생성을 제거하고, 메모리 사용을 최적화하기 위해 InputStream을 활용하여 데이터를 처리하도록 수정했습니다.
- 버퍼 크기 증가: 프로세스의 효율성을 높이기 위해 버퍼 크기를 4096byte로 증가시켰습니다. 이는 프로세스의 데이터 처리량을 늘려서 성능을 향상시켰습니다.
- 불필요한 IO 작업 제거: 불필요한 IO 작업을 최소화하여 메모리 사용을 줄였습니다. 이는 프로세스의 부하를 감소시켜서 전반적인 성능을 향상시켰습니다.
환경 설정
- Apache JMeter version : 5.6.3
- Spring boot version : 3.2.2
- Java version : 17
시나리오
JMeter를 사용하여 100명의 가상 사용자가 동시에 100MB 크기의 zip 파일을 서버에 첨부하고, 해당 파일을 분석한 후 결과를 반환하도록 시나리오를 작성했습니다.
테스트 결과
부하 테스트를 수행한 결과, 사용자의 요청 후 응답까지의 평균 속도와 서버가 처리할 수 있는 양에 집중해야 한다는 것을 확인했습니다.
- Throughput 비교
- 1차 테스트 : 10.2/min
- 2차 테스트 : 1.5/sec
- 3차 테스트 : 2.1/sec
- Average 비교
- 1차 테스트 : 351,514ms
- 2차 테스트 : 60,821ms
- 3차 테스트 : 42,222ms
더보기
답답한 마음에 Thread 수를 10 ~ 50 까지 점차 증가 시키며 했던 테스트 결과
테스트 환경이 다르기 때문에 테스트 결과를 믿을 수 는 없다.
- Thread 10, Ramp-up period 1, roop 1
- Thoughput : 1.8/sec | Average : 3,969
- Thread 20, Ramp-up period 1, roop 1
- Thoughput : 2.5/sec | Average : 6,618
- Thread 30, Ramp-up period 1, roop 1
- Thoughput : 2.6/sec | Average : 10,107
- Thread 40, Ramp-up period 1, roop 1
- Thoughput : 2.4/sec | Average : 14,628
- Thread 50, Ramp-up period 1, roop 1
- Thoughput : 2.3/sec | Average : 20,222
결과 분석
2차 테스트에 비해 Throughput은 약 40%, Average는 약 30.5% 개선되었습니다.
1차 테스트에 비해서는 Throughput은 약 1135%, Average는 약 87.97% 개선되었습니다.
문제 파악 및 해결 방안
- 프로세스 세분화: 불필요한 부분을 제거하고 효율적으로 재구성하여 더 빠른 실행을 위해 노력할 것입니다.
- 프로파일링 도구 활용: 병목 현상을 파악하고 트래픽 흐름을 조사하여 성능을 개선하는 데 도움이 되는 프로파일링 도구를 활용할 계획입니다.
- 메모리 관리: 메모리 누수를 방지하고 오버헤드를 최소화하기 위해 지속적인 메모리 관리를 진행할 것입니다.
사용하게 될 프로파일링 도구
- Spring Actuator
- 운영 환경에서 모니터링 및 관리를 지원하는 엔드포인트를 제공하여 수집된 정보를 모니터링 시스템으로 전송하거나 직접 모니터링하는 등 다양한 운영 및 모니터링 시나리오에서 사용할 수 있습니다.
- Actuator는 중요한 정보들이 많이 담겨 있기 때문에 사용할때는 보안을 철저히 하여 진행하여야 합니다.
- Prometheus
- 메트릭 및 로그 데이터를 수집하고 저장한 후 이를 검색하고 시각화하여 인프라스트럭처와 애플리케이션의 성능을 모니터링하는 시스템입니다.
- Grafana
- Prometheus와 통합하여 시각화 대시보드를 제공하여 시스템의 상태를 실시간으로 모니터링하고 문제를 진단할 수 있는 도구입니다.
배운점
- 람다식과 외부 변수 활용: 람다식 내에서 배열을 사용하여 외부 변수를 활용할 수 있다는 것을 배웠습니다. 배열 변수는 한 번 생성되면 다른 배열을 참조할 수 없으므로 사실상 final이라고 간주됩니다. 그러므로 람다식 내부에서 배열의 요소를 참조하거나 변경하는 것은 가능합니다.
- CPU 부하와 디스크 사용량 관계: CPU가 100%가 되면 갑자기 디스크 사용량이 빠르게 상승하는 것을 보고 찾아보본 결과 CPU 과부하가 발생하면 시스템의 성능이 저하될 수 있으며, 이로 인해 운영 체제가 스왑 파일을 통해 가상 메모리를 디스크로 옮기는 스왑 작업이 발생할 수 있습니다. 이는 메모리 부족 상황에서 메모리를 효율적으로 관리하기 위한 운영 체제의 메커니즘입니다. 따라서 CPU 과부하로 인해 디스크 사용량이 증가하는 상황을 이해할 수 있었습니다.
- 지속적인 성능 개선의 중요성: 테스트 결과를 통해 시스템의 성능을 개선하는 과정이 중요함을 깨닫게 되었습니다. 지속적인 성능 모니터링과 개선은 사용자 경험을 향상시키고 시스템의 안정성을 유지하는 데 필수적입니다. 이를 통해 개발 과정에서 성능에 대한 고려가 필요함을 깨달았으며, 이를 통해 사용자와 시스템 모두에게 이점을 제공할 수 있을 것이라는 확신을 갖게 되었습니다.
반응형
'Spring > SourceCode.io 프로젝트' 카테고리의 다른 글
[SourceCode.io] 5차 성능 테스트 : 분석 및 해결책 (0) | 2024.04.14 |
---|---|
Load Balancing을 통한 성능 최적화와 AWS의 활용 (0) | 2024.04.08 |
[SourceCode.io] 4차 성능 테스트 : 분석 및 해결책 (0) | 2024.04.03 |
[SourceCode.io] 2차 성능 테스트 : 분석 및 해결책 (0) | 2024.03.29 |
[SourceCode.io] 1차 성능 테스트 : 분석 및 해결책 (0) | 2024.03.28 |
Comments