성능테스트를 한 다음날 서버에 접속해도 응답이 오지않고 계속 "연결중"인 현상이 있었습니다.
이 현상을 해결하는 과정을 글로 담았습니다
서버 상황
cpu사용량: (13시~14시: 애플리케이션을 배포한 시간)
메모리 사용량
디스크 사용량
명령어: top
- 위의 자료를 토대로 사용할 수 있는 메모리가 거의 남지 않은 것을 확인하였습니다
- kswapd0 프로세스(메모리가 부족해서 SWAP메모리를 사용할때 생성되는 프로세스)가 cpu를 거의 점유하고 있는것으로 보아 메모리의 부족이 cpu사용률에 영향을 끼치고
- 이 문제 때문에 서버가 응답하지 않는것 같다고 생각하였습니다.
- 메모리 누수가 혹시 발생해서 자바(애플리케이샨)의 메모리 사용량이 많은건 아닌지 조사해봤습니다.
로컬에서 애플리케이션을 돌리고 나서 똑같은 요청을 보내봤습니다
- 점차증가하는 현상이 보여야 메모리 누수라고 판단할 수 있을 텐데 그런 현상은 보이지 않아서 메모리 누수가 아닌 것 같다고 판단하였습니다.
- spring자체가 메모리를 많이 먹고 있는 것 같았고, 이를 처리하기 위해선 scaleup을 해야하는데 그러기엔 비용문제가 있었습니다. 그래서 메모리 대신 swap용량을 늘리는 임시방편을 선택하였습니다.
- swap은 디스크를 메모리처럼 쓸 수 있게 하는거라 속도에 제한이 걸리겠지만 메모리가 부족해서 서버에 문제가 생기는 것보단 낫다는 판단을 하였습니다.
- 메모리 초과로 계속 실패되던 테스트가 정상으로 돌아왔습니다.
- 이전엔 두번째 실행을 하게 되면 더이상 서버가 버티지 못하고 오류율이 급격하게 증가하는 현상을보였는데 swap용량을 늘리고 나선 두번째 테스트에서도 적절한 오류율과 응답률을 보여주고 있습니다.
결과
'문제해결' 카테고리의 다른 글
| Reddisson을 활용한 동시성 문제 해결 (1) | 2023.10.04 |
|---|---|
| 로드밸런싱을 통한 높은 CPU 점유율 해결하기 (0) | 2023.09.18 |
| pinpoint & nGrinder 사용하여 대용량 트래픽 시 오류 확인 (0) | 2023.09.14 |
| 프로젝트 동시성 문제 해결 - 데이터베이스 조건 (0) | 2023.09.07 |
| s3mock 도입 (0) | 2023.09.07 |