250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

EC2가 CPU 사용률 100% 현상 발생 후 멈추는 증상 해결 방법 본문

[Snow-ball]프로그래밍(컴퓨터)/cloud

EC2가 CPU 사용률 100% 현상 발생 후 멈추는 증상 해결 방법

Snow-ball 2024. 10. 21. 21:27
반응형

문제 발생

프로젝트를 작업하면서 AWS EC2의 CPU 사용률 100% 사용하게 되는 현상이 발생하였다. 

100%를 사용하게되니 서버가 동작하지 않는 현상이 생겼고, 터미널로도 접속 불가, 깃 러너도 offline이 되는 등 이상 현상들이 생겼다. 

 

이상 현상이 생기는 이유를 개인적으로 2가지로 나눠질 수 있다고 본다.

1. EC2 자체 문제 (스펙, 크레딧, 하드웨어 등등)

2. 해킹

 

일단 나는 1번이라고 생각하고 문제에 접근하였다. 그 이유는 EC2를 삭제했다가 재설치 후 깃을 사용하여 빌드하고 나서 완료되면 또 CPU 100%를 사용하는 현상이 발생하였기 때문이다.

해커가 EC2에 접근해서 CPU를 사용하기에는 너무 짧은 텀이라고 판단했기 때문이다.

 

특히, EC2 중 스펙이 부족해서 라고 생각했으며, 이에 대해 어떻게 해결할까 하다가 SWAP FILE 방법을 알게되었다.

SWAP FILE 이란, 부족한 RAM을 늘릴 수 없으니 (실제로 AWS EC2 스케일업이 가능하긴함... 비용이 문제지) HDD 또는 SSD의 일부를 RAM 으로 사용하는 것이다.

 

 

 


 

 

 

SWAP FILE 장점

1) 메모리 부족 상황에서 안정성 향상:

- RAM이 부족해질 때 스왑 파일은 디스크 일부를 메모리처럼 사용하게 된다. 이를 통해 메모리 부족으로 인한 시스템 성능 저하나 특정 프로세스의 비정상 종료를 방지할 수 있다. 정리하면, 갑작스러운 메모리 부족 현상으로 인해 시스템이 멈추거나 주요 애플리케이션이 종료되는 것을 예방해 안정적인 운영이 가능해진다.

2) 비용 절감 효과

- AWS(등 CLOUD 환경 컴퓨터)에서 인스턴스 사양을 높이는 것은 비용이 많이 들 수 있다. 스왑 파일을 설정함으로써 RAM을 물리적으로 추가하지 않고도, 디스크 공간을 활용하여 메모리 부족 문제를 일시적으로 해결할 수 있다. 특히, 인스턴스의 사양 업그레이드가 당장 필요하지 않은 경우 비용 절감 측면에서 유리하다.

3) 비교적 쉬운 설정과 유연성

- 스왑 파일은 디스크의 공간만 있으면 쉽게 생성하고 관리할 수 있다. 시스템의 필요에 따라 스왑 파일의 크기를 조정하거나, 필요 없을 때 삭제하는 것도 간다하다. 이렇게 유연하게 메모리 관리를 할 수 있는점이 큰 장점이다.

4) 시스템의 갑작스러운 자원 수요 대응

- 특정 작업(예: 대용량 파일 컴파일, 일시적인 트래픽 증가 등)으로 인해 일시적으로 메모리 사용량이 급증할 수 있다. 이 때 스왑 파일은 이러한 일시적인 자원 수요에 대응할 수 있는 역할을 한다. RAM을 다 소진한 경우에도 스왑 파일이 있음으로써 시스템이 그 부담을 덜고 프로세스를 유지할 수 있다.

5) 메모리 덤프 역할

- 잘 사용되지 않는 메모리 페이지나, 프로세스에서 거의 사용하지 않는 데이터를 스왑 파일로 이동시켜 메모리의 여유 공간을 확보하게 된다. 이렇게 함으로써 자주 사용하는 데이터가 RAM에서 더 빠르게 접근 가능하도록 돕는다. CPU가 메모리 접근에 따른 대기 시간을 줄이면서, 시스템의 성능을 향상시킬 수 있다.

 

 

 


 

 

 

한계점

1) 느린 접근 속도

- HDD 나 SSD 의 속도는 RAM 보다 느리기 때문에, 스왑 파일을 사용하는 경우 실제 RAM보다 훨씬 느린 속도로 데이터를 처리하게 된다. 따라서 스왑 파일은 메모리 부족을 해결하기 위한 보조 수단일 뿐이고, 장기적인 해결책은 아니다.

2) 디스크 수명 단축

- 스왑 사용은 디스크에 많은 읽기/쓰기 작업을 추가하게 되므로, SSD의 경우 디스크 수명이 줄어드는 부작용도 있다.

 

 

 


 

 

 

설정 코드

- 스왑 파일 생성

sudo fallocate -l 1G /swapfile

만약 fallocate 명렁어 안될 경우 (밑에 코드로 실행- )
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

 

- 스왑 파일의 권한 설정

sudo chmod 600 /swapfile

 

- 스왑 파일 설정

sudo mkswap /swapfile

 

- 스왑 활성화

sudo swapon /swapfile

 

- 스왑 활성화 확인

sudo swapon --show

 

- 부팅 시 자동 활성화 설정

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

 

- 시스템 메모리와 스왑 사용량 확인

free -h

 

 

- 나의 경우에는 SWAP FILE을 사용했지만 javascript heap 부족의 증상도 있어서 추가 작업을 진행했다.

node --max-old-space-size=4096 your_script.js

 

 

 

 

 

 

반응형
Comments