서버 응답 없는 현상 해결하기 (메모리 부족)

성능테스트를 한 다음날 서버에 접속해도 응답이 오지않고 계속 "연결중"인 현상이 있었습니다.
이 현상을 해결하는 과정을 글로 담았습니다

서버 상황

image

cpu사용량: (13시~14시: 애플리케이션을 배포한 시간)

 

image

메모리 사용량

image

디스크 사용량

 

image

명령어: top 

  • 위의 자료를 토대로 사용할 수 있는 메모리가 거의 남지 않은 것을 확인하였습니다
  • kswapd0 프로세스(메모리가 부족해서 SWAP메모리를 사용할때 생성되는 프로세스)가 cpu를 거의 점유하고 있는것으로 보아 메모리의 부족이 cpu사용률에 영향을 끼치고
  • 이 문제 때문에 서버가 응답하지 않는것 같다고 생각하였습니다.
  • 메모리 누수가 혹시 발생해서 자바(애플리케이샨)의 메모리 사용량이 많은건 아닌지 조사해봤습니다.
    로컬에서 애플리케이션을 돌리고 나서 똑같은 요청을 보내봤습니다

image

  • 점차증가하는 현상이 보여야 메모리 누수라고 판단할 수 있을 텐데 그런 현상은 보이지 않아서 메모리 누수가 아닌 것 같다고 판단하였습니다.
  • spring자체가 메모리를 많이 먹고 있는 것 같았고, 이를 처리하기 위해선 scaleup을 해야하는데 그러기엔 비용문제가 있었습니다. 그래서 메모리 대신 swap용량을 늘리는 임시방편을 선택하였습니다.
  • swap은 디스크를 메모리처럼 쓸 수 있게 하는거라 속도에 제한이 걸리겠지만 메모리가 부족해서 서버에 문제가 생기는 것보단 낫다는 판단을 하였습니다.

image

 

image

  • 메모리 초과로 계속 실패되던 테스트가 정상으로 돌아왔습니다.
  • 이전엔 두번째 실행을 하게 되면 더이상 서버가 버티지 못하고 오류율이 급격하게 증가하는 현상을보였는데 swap용량을 늘리고 나선 두번째 테스트에서도 적절한 오류율과 응답률을 보여주고 있습니다.

 

결과

image

 

image

 

image

 

image