[이슈] 배포 서버 웹 서버 사용량 MAX로 인한 이슈

2024. 2. 14. 11:50이슈 창고

728x90
SMALL

완료되어 배포되는 중이던 프로젝트가 갑자기 도중 2달간 유지되었던 배포 서버의 웹 서버 사용량이 꽉 차서 프로젝트를 새롭게 빌드하거나 올릴 수 없는 상황이 발생하였는데,

이 때, 위의 리눅스 상태 정보를 확인할 수 있는 명령어를 정리해주신 분의 도움을 받아 해결할 수 있었습니다.

원인은 너무나 간단하고 당연했던... 정말 한심했던 이유였습니다.

 

[Reason]

일단 배포하고 있는 가비아 서버의 웹 서버 사용량을 보니 100 프로를 전부 사용하고 있었고, 이에 해당 가비아의 리눅스 서버를 파일질라를 통해 한번더 용량이 큰 파일이 존재하는지 확인한 뒤, 삭제 처리를 진행해주었지만 96퍼센트 까지 밖에 낮출 수가 없었습니다.

또한, 가장 많은 용량을 차지하는 빌드된 프로젝트 jar 파일을 지워도 마찬가지였습니다.

 

따라서 용량이 문제가 아니라면 그 다음 생각했었던 부분은 사이트나 서버에 접속하고자하는 유입량이 많아서 그렇다고 생각했고 만약 맞다면 유입량을 방지할 방법을 제가 제어할 수는 없는 부분이었기 때문에 고려하지 않았습니다.

 

때문에 본격적으로 배포 서버의 상태를 확인해보며 해결해나가고자 생각되었습니다.

 

TOP 명령어 활용

우선 해당 가비아 서버에 들어가 top 명령어를 통해 현재 메모리와 cpu를 사용하고있는 프로세스들을 확인해보았습니다.

조회된 프로세스들 중에서 quser의 java 커맨드 프로세스가 가장 많은 메모리 및 cpu를 사용하고 있는 것을 확인하였습니다.

 

top 명령어 조회 속성

  • PID
    • PID는 프로세스 ID이며 프로세스를 구분하기 위한 겹치지않는 고유한 값입니다.
  •  USER
    • 해당 프로세스를 실행한 USER 이름 또는 효과를 받는 USER의 이름입니다.
  • PR & NI
    • PR : 커널에 의해서 스케줄링되는 우선순위입니다.
    • NI : PR에 영향을 주는 nice라는 값입니다.
  • VIRT, RES, SHR, %MEM
    • 해당 필드들은 프로세스의 메모리와 관련있습니다.
    • VIRT : 프로세스가 소비하고 있는 총 메모리입니다. 프로그램이 실행중인 코드, heap, stack과 같은 메모리, IO buffer 메모리를 포함합니다.
    • RES : RAM에서 사용중인 메모리의 크기를 나타냅니다.
    • SHR : 다른 프로세스와의 공유메모리(Shared Memory)를 나타냅니다.
    • %MEM : RAM에서 RES가 차지하는 비율을 나타냅니다.
  • S : 프로세스의 현재 상태를 나타냅니다.
  • TIME+ : 프로세스가 사용한 토탈 CPU 시간
  • COMMAND : 해당 프로세스를 실행한 커맨드를 나타냅니다.

 

virt, res, shr 속성들을 확인했을 때 가장 많은 사용량을 가지고 있는 것을 확인할 수 있었습니다.

이 때, 문득 배포 서버에 무중단으로 실행 배포 중이던 프로젝트가 계속해서 실행되고 있음을 기억하게 되었습니다.

이에 ps -ef | grep java 명령어를 통해 현재 실행 중인 java 프로젝트가 존재하는지 확인하였고 마침 실행중이던 PID 9300번의 프로젝트를 발견할 수 있었습니다.

이 PID 9300번의 java 프로세스가 위에서 확인했던 top 명령어를 통해 조회되던 가장 많은 사용량을 가진 java 커맨드 프로세스였었습니다.

 

 

[Solution]

문제가 되던 프로세스를 확인했으니 이 프로세스를 중지해주고 다시 새로운 프로젝트를 빌드하여 배포해주면 될 것입니다.

 

kill -9 {pid} 명령어로 프로세스를 종료시키고 다시 한 번 무사히 종료되었는지 ps -ef | grep java 명령어를 통해 확인해주었습니다.

 

가비아 홈페이지에 접속하여 웹 서버 사용량을 확인했을 때 막혔던 체중이 쑥 빠지는 것처럼 사용량이 많이 확보된 것을 확인할 수 있었습니다.

 

이제 다시 프로젝트를 빌드하여 해당 가비아 서버에 배포하였더니 정상적으로 실행되었습니다.

 

 

+ 도움받은 리눅스 관련 명령어 정리 글

https://sabarada.tistory.com/146

 

[Linux] top 명령어로 서버의 상태 파악하기

안녕하세요. 오늘은 linux의 top 명령어어 대해서 분석하는시간을 가져보도록 하겠습니다. TOP 명령어 top 명령어는 현재 OS의 상태를 나타내주는 CLI 어플리케이션입니다. 메모리 사용량, CPU 사용량

sabarada.tistory.com

 

728x90
반응형
LIST